判断
1 | if condition1 |
如果else没有语句执行
则不能留空 , 最好直接不写这个else
举例1
2
3
4
5
6
7
8
9
10
11if [ `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 | for ((i=1 ; i<=10 ; i++)) |
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
4for item in `ls /usr/local`
do
echo $item
done
当然如果是找一个目录下的文件 , 也可以不用ls命令
for循环自带路径查找功能1
2
3
4
5for item in /usr/local/*
do
echo $item
done
# 注意路径不要加引号
while循环
while循环是在判断条件为false的时候结束循环1
2
3
4
5
6cnt=1
while (( $cnt<=5 ))
do
echo $cnt
let "cnt++"
done
while :或者while true表示死循环
until循环
格式与while循环基本一致 , 只不过是当判断条件为true的时候结束循环1
2
3
4
5
6cnt=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
15echo "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
9function myFunc() {
echo "参数 $1,$2,$3"
echo "所有参数:"
for arg in $@
do
echo $arg
done
}
myFunc "aa" "bb"
说明 :
- 与获取脚本的参数类似 , 使用
$序号或者${序号}来获取
但是如果到了10 , 就必须写作${10}, 否则会与$1产生歧义function关键字也可以省略
文件包含
一个shell脚本当中可以引入另一个shell脚本1
2
3. /home/sookie/test2.sh
# 或者
source /home/sookie/test2.sh
被引入的文件并不需要可执行权限