<返回更多

Linux革命性工具,shell脚本选择结构让程序更加智能

2023-01-12    黑猫编程
加入收藏

选择结构让程序更加智能

shell作为一种脚本语言,语法格式和一般编程语言比如C++语言很相似,然而在变量的格式上略有区别,需要经过一定的练习才可以熟练掌握。

程序如果逐条执行,单纯的将一些指令顺序放到文件中,这就是顺序结构。

这时程序的功能依然很有限,只可以处理简单逻辑。而实际的需求是要根据当前情况进行判断,进而给出结果。比如检测当前主机与目标主机之间是否ping通,如果ping通输出“可以ping通”,否则输出“不可以ping通”,这就需要让程序具备判断的能力,而当下所谓的人工智能也是基于最基础的判断,让程序在不同阈值下做出最优选择。

test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

test命令用exit code返回结果,而不是使用stdout。0表示真,非0表示假。

数值测试:

参数

说明

-eq

等于则为真

-ne

不等于则为真

-gt

大于则为真

-ge

大于等于则为真

-lt

小于则为真

-le

小于等于则为真


 

test也可以使用[]代替

 

字符串测试

参数

说明

=

等于则为真

!=

不相等则为真

-z 字符串

字符串的长度为零则为真

-n 字符串

字符串的长度不为零则为真


 

文件测试

参数

说明

-e 文件名

如果文件存在则为真

-r 文件名

如果文件存在且可读则为真

-w 文件名

如果文件存在且可写则为真

-x 文件名

如果文件存在且可执行则为真

-s 文件名

如果文件存在且至少有一个字符则为真

-d 文件名

如果文件存在且为目录则为真

-f 文件名

如果文件存在且为普通文件则为真

-c 文件名

如果文件存在且为字符型特殊文件则为真

-b 文件名

如果文件存在且为块特殊文件则为真


 

逻辑运算符&&和||

&& 表示与,|| 表示或
二者具有短路原则:
expr1 && expr2:当expr1为假时,直接忽略expr2
expr1 || expr2:当expr1为真时,直接忽略expr2
表达式的exit code为0,表示真;为非零,表示假。
hioier@yunpc:~/scripts$ test -e test.sh && echo "exist" || echo "Not exist"
Not exist

if语句

单分支

if condition
then
    command1 
    command2
    ...
    commandN 
fi
a=3
b=4

if [ $a -lt $b ] && [ $a -gt 2 ]
then
    echo "YES"
fi

双分支

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi
a=3
b=4

if [ $a -gt $b ] && [ $a -gt 2 ]
then
    echo "YES"
else
    echo "NO"
fi

多分支

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

另外,Shell 还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高, -a 次之, -o 最低。

declare -i score=69

if test $score -ge 90 -a $score -le 100
then
    echo "A"
elif test $score -ge 80 -a $score -lt 90
then
    echo "B"
elif test $score -ge 60 -a $score -lt 80
then
    echo "C"
else
    echo "D"
fi

case语句

case ... esac 为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。

可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

case ... esac 语法格式如下:

case $变量名称 in
    值1)
        command1
        command2
        ...
        commandN
        ;;  # 类似于C/C++中的break
    值2)
        command1
        command2
        ...
        commandN
        ...
        ;;
    *)  # 类似于C/C++中的default
        command1
        command2
        ...
        commandN
        ...
        ;;
esac
declare -i n
read -p "请输入1-4之间的数字:" n

case $n in
    1) echo "选择1"
    ;;
    2) echo "选择2"
    ;;
    3) echo "选择3"
    ;;
    4) echo "选择4"
    ;;
    *) echo "请输入正确的数字"
    ;;
esac
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>