• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 判断
  2. 2. 循环
    1. 2.1. for循环
      1. 2.1.1. foreach
    2. 2.2. while循环
    3. 2.3. until循环
    4. 2.4. break与continue
  3. 3. 多选择语句
  4. 4. 函数
  5. 5. 文件包含

2.2、shell编程(3)-流程控制与函数

2018-03-06 00:52:22
总字数 633
预计阅读时间 2 分钟

判断

1
2
3
4
5
6
7
8
9
if condition1
then
command1
elif condition2
then
command2
else
command3
fi

如果else没有语句执行
则不能留空 , 最好直接不写这个else

举例

1
2
3
4
5
6
7
8
9
10
11
if [ `ps ax | grep -c "ssh"` -ge 1 ]
then
echo "RUNNING"
fi
# grep的-c参数代表对过滤后的行进行计数

# 也可以使用test命令做判断
if test `ps ax | grep -c "ssh"` -ge 1
then
echo "RUNNING"
fi

循环

for循环

1
2
3
4
5
for ((i=1 ; i<=10 ; i++))
do
echo $i
done
# 注意使用(()), 里面的变量并不需要加$

for (( ; ; )) - 死循环

foreach

bash支持对集合进行迭代的foreach类型语法
使用for ... in ...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# seq命令可以生成一个序列
for i in `seq 1 10`
do
echo $i
done

# 这样也是一个序列
for i in {1..10}
do
echo $i
done

# 迭代遍历一个数组
arr=("ab" "cd" "ef")
for item in ${arr[@]}
do
echo $item
done

如果一个命令返回的是一个集合 , 也可以执行循环迭代

1
2
3
4
for item in `ls /usr/local`
do
echo $item
done

当然如果是找一个目录下的文件 , 也可以不用ls命令
for循环自带路径查找功能

1
2
3
4
5
for item in /usr/local/*
do
echo $item
done
# 注意路径不要加引号

while循环

while循环是在判断条件为false的时候结束循环

1
2
3
4
5
6
cnt=1
while (( $cnt<=5 ))
do
echo $cnt
let "cnt++"
done

while :或者while true表示死循环

until循环

格式与while循环基本一致 , 只不过是当判断条件为true的时候结束循环

1
2
3
4
5
6
cnt=1
until (( $cnt>=5 ))
do
echo $cnt
let "cnt++"
done

break与continue

表示跳出循环以及继续下一次循环 , 与其他语言当中类似

多选择语句

类似其他语言当中的switch , bash当中使用case关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo "input a number:"
# read表示从终端读取用户输入内容
read num
case $num in
1) echo "数字1"
;;
2) echo "数字2"
;;
3|4) echo "3或者4"
;;
ok) echo "字符串ok"
;;
*) echo "其他内容"
;;
esac

函数

shell当中可以自定义函数

1
2
3
4
5
6
7
8
9
function myFunc() {
echo "参数 $1,$2,$3"
echo "所有参数:"
for arg in $@
do
echo $arg
done
}
myFunc "aa" "bb"

说明 :

  1. 与获取脚本的参数类似 , 使用$序号或者${序号}来获取
    但是如果到了10 , 就必须写作${10} , 否则会与$1产生歧义
  2. function 关键字也可以省略

文件包含

一个shell脚本当中可以引入另一个shell脚本

1
2
3
. /home/sookie/test2.sh
# 或者
source /home/sookie/test2.sh

被引入的文件并不需要可执行权限

  • linux
  • shell
  • linux

扫一扫,分享到微信

2.3、shell(4)-使用技巧
2.0、shell编程(1)-初见 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆