Linux Shell 02 流程控制语句

时间:2023-03-09 00:36:05
Linux Shell 02 流程控制语句

一.if语句格式:支持if/elif/else形式,支持嵌套

  1. command执行成功(及退出状态为0)时,执行command2

  2. 当判断条件为test命令时,判断结果为true时,执行command2

if command; then
command1
else
  command2
fi if command
then
command
fi

二. for语句格式

for var in list
do
command
done

1.读取列表中得值

  a.列表中的值默认以空格分隔,

  b.当值中包含单引号需要转义或者使用双引号

  c.值中包含空格,需使用双引号括起来

for var in I\'m come from Nanjing and I want go to "New York", I can\'t say France
do
echo $var
done

2. 从变量读取列表

list="AAA BBB CCC"
list=$list" CCC" #字符串追加内容
for var in list
do
echo $var
done

3. 读取命令中得值

for var in `cat /etc/passwd`
do
echo $var
done

4. 字段分隔符

  在3的示例中,内容并不是按行输出的,因为在shell中将【空格/制表符/换行符】看做字段分隔符

  在上例中如果希望内容按行输出,则需要修改字段分隔符

IFS.OLD=$IFS
IFS=$'\n' for var in `cat /etc/passwd`
do
echo $var
done IFS=$IFS.OLD

三.while语句

#while命令中test command的格式和if语句相同
while test command
do
command
done

1.while的测试语句结果为真或者命令退出状态为0的时候,循环会一直进行下去,通常需要在循环体内改变test的结果

2.while的测试语句可以写多条命令,以最后一条命令的结果为判断依据。

3.while的测试语句比循环体内的语句多执行一次(即最后判断失败的那一次)

var1=
while echo $var1
[ $var -ge ]
do
echo "Now in loop"
var1=$[ $var1 - ]
done

四.until语句

# until命令的执行方式与while正好相反,当测试结果为假或者命令退出状态非0时,循环继续
# until的测试语句中也可以写多条命令
until test command
do
command
done

五.continue和break语句

1.break 跳出循环

  a.可以用在for/while/until语句中

  b. break终止当前循环

  c. "break n"终止指定层循环,n=1代表当前循环,n=2代表当前循环的上一层循环

2.continue 跳过本次循环继续循环

  a.用法与break基本相同

  b.确保continue不会跳过对循环判断条件的改变,否则会造成死循环

六. 循环的输出

可以在done关键字的末尾使用管道或者重定向来处理循环体内的输出

#重定向
for file in ~
do
if [ -d $file]
then
echo "$file is directory"
else
echo "$file is file"
fi
done > out.txt #管道
for user in `cat /etc/passwd`
do
echo $user
done | sort