判断与控制

if语句

if-else

#语法
if command 或 [ condition ]
then
    conmands
fi
#或
if command 或 condition;then
    conmands
fi

#command(命令语句)执行成功或条件判断为true,返回值为0的时候才会执行then
#condition(判断条件)左右两侧加中括号,且中括号的里侧必须加空格

if-then-else

#语法
if conmmand 或 [ condition ]
then
    commands
else
    commands
fi

嵌套if

#语法
if conmmand 或 [ condition ]
then
    commands
elif conmmand 或 [ condition ]
then
    commands
else
    commands
fi

条件判断

数值比较

**格式:[ 数值1 判断符 数值2 ] **

例: n1 -eq n2

判断符 含义
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于

#!/bin/bash
#

if [ $1 -eq $2 ]
then
        echo "111"
elif [ $1 -gt $2 ]
then
        echo "222"
elif [ $1 -lt $2 ]
then
        echo "333"
fi

字符串比较

判断符 含义
= 相等
!= 不等
< 小于(依次比较每个字符在字母表中的顺序)
> 大于(同上)
-n str1 str1的长度不是0
-z str1 str1的长度是0

如果做非零判断,str1是自己定义的变量,需要加双引号包围变量

文件比较

判断符 含义
-d file 是否为目录
-f file 是否为文件
-e file 是否存在
-r file 是否可读
-w file 是否可写
-x file 是否可执行
-s file file存在且非空
file1 -nt -file2 file1比file2新
file1 -ot file2 file1比file2旧

复合条件

#使用正常的 && || 比较。逻辑判断符两侧加空格
#每个条件都要用中括号括起来

#例
var1=11
var2=22
var3=33
if [ $var1 -gt $var2 ] && [ $var2 -lt $var3];then
    echo "111"
fi

case语句

case 变量 in
    参数1)
        commands
        ;;
    参数2)
        commands
        ;;
esac

#例:
#!/bin/bash
#

var1=mike
case $var1 in
        jack)
                echo "hello jack"
                ;;
        mike)
                echo "hello mike"
                ;;
        *)
                echo "hello everyone"
                ;;
esac

循环与控制

for语句

语法

#语法
for var in list
do
    commands
done

基础应用

#例1

#!/bin/bash
#

for i in beijing shandong shanghai
do
        echo "Province is $i"
done
#可以通过另行设置IFS的值,改变默认分隔符 IFS=":"

#例2

#!/bin/bash
#

for i in {01..20}
do
        echo "Number is $i"
done

从命令执行结果读取值

#例1:输出root目录下的所有内容

#!/bin/bash
#

FILE=$(ls /root/)

for i in $FILE
do
        echo "file is $i"
done

#例2:for配合if判断,输出root目录下的所有文件夹

#!/bin/bash
#

for i in $(ls /root/)
do
        if [ -d /root/$i ];then
                echo "$i is DIR"
        elif [ -f /root/$i ];then
                echo "$i is FILE"
        else
                echo "$i is OTHER TYPE"
        fi
done

#关于使用回车键等转义符作为切分依据的说明
IFS=$'\n'

for和if嵌套案例

#循环判断/root/code_2目录下的所有文件,给以.sh结尾的文件赋权755执行权限

#!/bin/bash
#

var1=$(ls /root/code_2)

for i in $var1
do
        if [[ "$i" == *".sh" ]];then
                $(chmod 755 /root/code_2/$i)
        fi
done

C语言风格的for循环语句

for (( a=1; a < 10; a++))
do
    commands
done
#!/bin/bash
#

for (( i = 1; i <= 100; i++  ))
do
        (( sum+=$i ))
done

echo "1+2+3+4+....+100=$sum"

while循环

语法

while command
do
    commands
done
#例

#!/bin/bash
#

num=10
while [ $num -lt 20 ]
do
        echo "NUMBER IS $num"
        ((num+=1))
done

until循环

#while的反向语法,不符合时执行,当command为真时才停止
until command
do
    commands
done

break指令

#通过关键字break可以跳出循环
#break后面跟数字,可以指定跳出层级,比如 break 2 可以跳出两个循环

continue指令

#例

#!/bin/bash
#

for (( i=0;i<20;i++ ))
do
        if (( i%2==0 ));then
                continue
        else
                echo "$i"
        fi
done
如人饮水,冷暖自知。
最后更新于 2023-08-20