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代表是变量名

pattern 1)              模式1;

    command1            需要执行的语句

    ;;                  两个分号代表命令结束

pattern 2)

    command2

    ;;

pattern 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

举例说明

#!/bin/bash

for var

do

echo $var

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
发出的红包

打赏作者

一名初学袁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值