shell脚本的流程控制

1条件判断

1. 条件判断语法格式

格式1: test 条件表达式

格式2: [ 条件表达式 ]

格式3: [[ 条件表达式 ]]

2. 条件判断相关参数

可以判断文件类型,判断文件新旧,判断字符串是否相等,判断权限等等...

㈠判断文件类型

举例说明:

test -e file 只要文件存在条件为真

[ -d /shell01/dir1 ] 判断目录是否存在,存在条件为真

[ ! -d /shell01/dir1 ] 判断目录是否存在,不存在条件为真

[[ -f /shell01/1.sh ]] 判断文件是否存在,并且是一个普通的文件

㈡判断文件权限

㈢判断文件新旧

说明:这里的新旧指的是文件的修改时间。

㈣判断整数

㈤判断字符串

㈥多重条件判断

特别说明:

&& 前面的表达式为真,才会执行后面的代码

|| 前面的表达式为假,才会执行后面的代码

; 只用于分割命令或表达式

① 举例说明

数值比较

[root@server ~]# [ $(id -u) -eq 0 ] && echo "the user is admin" 
[root@server ~]$ [ $(id -u) -ne 0 ] && echo "the user is not admin" 
[root@server ~]$ [ $(id -u) -eq 0 ] && echo "the user is admin" || echo "the user is not admin" 
[root@server ~]# uid=`id -u` 
[root@server ~]# test $uid -eq 0 && echo this is admin 

this is admin

[root@server ~]# [ $(id -u) -ne 0 ] || echo this is admin 

this is admin

[root@server ~]# [ $(id -u) -eq 0 ] && echo this is admin || echo this is not admin 

this is admin

[root@server ~]# su - stu1 
[stu1@server ~]$ [ $(id -u) -eq 0 ] && echo this is admin || echo this is not admin 

this is not admin

类C风格的数值比较

注意:在(( ))中,=表示赋值;==表示判断

[root@server ~]# ((1==2));echo $? 
[root@server ~]# ((1<2));echo $? 
[root@server ~]# ((2>=1));echo $? 
[root@server ~]# ((2!=1));echo $? 
[root@server ~]# ((`id -u`==0));echo $? 
[root@server ~]# ((a=123));echo $a 
[root@server ~]# unset a 
[root@server ~]# ((a==123));echo $? 

字符串比较

注意:双引号引起来,看作一个整体;= 和 == 在[ 字符串 ] 比较中都表示判断

[root@server ~]# a='hello world';b=world 
[root@server ~]# [ $a = $b ];echo $? 
[root@server ~]# [ "$a" = "$b" ];echo $? 
[root@server ~]# [ "$a" != "$b" ];echo $? 
[root@server ~]# [ "$a" !== "$b" ];echo $? 错误
[root@server ~]# [ "$a" == "$b" ];echo $? 
[root@server ~]# test "$a" != "$b";echo $? 

test 表达式

[ 表达式 ]

[[ 表达式 ]]

[root@server ~]# a= 
[root@server ~]# test -z $a;echo $? 
[root@server ~]# a=hello
[root@server ~]# test -z $a;echo $? 
[root@server ~]# test -n $a;echo $? 
[root@server ~]# test -n "$a";echo $? 

# [ '' = $a ];echo $?

-bash: [: : unary operator expected

2

# [[ '' = $a ]];echo $?

0

[root@server ~]# [ 1 -eq 0 -a 1 -ne 0 ];echo $? 
[root@server ~]# [ 1 -eq 0 && 1 -ne 0 ];echo $? 错误
[root@server ~]# [[ 1 -eq 0 && 1 -ne 0 ]];echo $? 

② 逻辑运算符总结

1. 符号;和&&和||都可以用来分割命令或者表达式

2. 分号(;)完全不考虑前面的语句是否正确执行,都会执行;号后面的内容

3. && 符号,需要考虑&&前面的语句的正确性,前面语句正确执行才会执行&&后的内容;反之亦然

4. || 符号,需要考虑||前面的语句的非正确性,前面语句执行错误才会执行||后内容;反之亦然

5. 如果&&和||一起出现,从左往右依次看,按照以上原则

2.流程控制语句

1. if语句

㈠if结构

if condition
then
    command1 
    command2
    ...
    commandN 
fi

㈡if...else结构

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

㈢if...elif...else结构

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

2.case语句

语法结构

case var in             定义变量;var代表是变量名
1)                            模式1;
    command1            需要执行的语句
    ;;                  两个分号代表命令结束
2)
    command2
    ;;
3)
    command3
    ;;
*)                              default,不满足以上模式,默认执行*)下面的语句
    command4
    ;;
esac                            esac表示case语句结束

3.for循环语句

1. for循环语法结构

㈠列表循环

列表for循环:用于将一组命令执行已知的次数

基本语法格式

for variable in {list}
do 
command 
command 
… 
done 

或者

for variable in a b c 
do 
command 
command 
done 

举例说明

# for var in {1..10};do echo $var;done 
# for var in 1 2 3 4 5;do echo $var;done 
# for var in `seq 10`;do echo $var;done 
# for var in $(seq 10);do echo $var;done 
# for var in {0..10..2};do echo $var;done 
# for var in {2..10..2};do echo $var;done 
# for var in {10..1};do echo $var;done 
# for var in {10..1..-2};do echo $var;done 
# for var in `seq 10 -2 1`;do echo $var;done

㈡不带列表循环

不带列表的for循环执行时由用户指定参数和参数的个数

基本语法格式

for variable 
do 
command 
command 
… 
done 

举例说明

echo "脚本后面有$#个参数"

㈢类C风格的for循环

基本语法结构

for(( expr1;expr2;expr3 )) 
do 
command 
command 
… 
done 
for ((i=1;i<=5;i++)) 
do 
echo $i 
done 

expr1:定义变量并赋初值

expr2:决定是否进行循环(条件)

expr3:决定循环变量如何改变,决定循环什么时候退出

举例说明

# for ((i=1;i<=5;i++));do echo $i;done 
# for ((i=1;i<=10;i+=2));do echo $i;done 
# for ((i=2;i<=10;i+=2));do echo $i;done

4.while循环语句

特点:条件为真就进入循环;条件为假就退出循环

1. while循环语法结构

while 表达式 
do 
command... 
done 
while [ 1 -eq 1 ] 或者 (( 1 > 2 )) 
do 
command 
command 
... 
done

循环打印1-5数字

FOR循环打印:

for ((i=1;i<=5;i++)) 
do 
echo $i 
done 

while循环打印:

i=1 
while [ $i -le 5 ] 
do 
echo $i 
let i++ 
done 

5.until循环

特点:条件为假就进入循环;条件为真就退出循环

1. until语法结构

until expression [ 1 -eq 1 ] (( 1 >= 1 )) 
do 
command 
command 
... 
done

打印1-5数字

i=1 
while [ $i -le 5 ] 
do 
echo $i 
let i++ 
done 
 
i=1 
until [ $i -gt 5 ] 
do 
echo $i 
let i++ 
done

6.循环控制语句

continue:继续;表示循环体内下面的代码不执行,重新开始下一次循环

break:打断;马上停止执行本次循环,执行循环体后面的代码

exit:表示直接跳出程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值