• shell 脚本语句


    目录

    条件语句

    test 命令

    比较整数数值

    字符串比较

    命令举

    条件逻辑测试操作

    组合写法

    举例

    双中括号

    ​编辑

    ( ) / { }

    if 语句的结构

    case 语句

    脚本举例

    识别 yes 和 no 脚本

    检查磁盘使用情况脚本

    新建用户以及随机设置用户密码的脚本

    补充命令

    [RANDOM%3+1]

    ping 小脚本

    make -j2

    df -h |grep boot|awk '{print $5}'|tr -d %

    grep -q

    id -u

    文件表达式


    条件语句

    test 命令

    test作用
    -d测试是否为目录
    -e测试文件是否存在,不分文件和目录
    -a测试目录或文件是否存在,有 bug 不建议使用
    -f测试是否为文件
    -r测试当前用户是否有权限读取
    -w测试当前用户是否有权限写入
    -x测试当前用户是否有权限执行
    -l检测是否为软连接文件

    比较整数数值

    —— 格式:[ 整数1 -选项 整数2 ] 公式

    选项作用
    -eq第一个数 等于(Equal) 第二个数
    -ne第一个数 不等于(Not Equal) 第二个数
    -gt第一个数 大于(Greater Than) 第二个数
    -lt第一个数 小于(Lesser Than) 第二个数
    -le第一个数 小于或等于(Lesser or Equal) 第二个数
    -ge第一个数 大于或等于(Greater or Equal) 第二个数

    字符串比较

    符号格式作用
    =[ 字符串1 = 字符串2 ]字符串内容相同
    !=[ 字符串1 != 字符串2 ]字符串内容不同,!号表示取反
    -z[ -z 字符串 ]字符串内容为空
    -n[ -n 字符串 ]字符是否存在
    命令举
    1. [root@localhost ~]# text1=yuan #定义 text1
    2. [root@localhost ~]# text2=shen #定义 text2
    3. #因为二者不同,此举是比较相同字符串,所以命令错误,显示为 1
    4. [root@localhost ~]# [ $text1 = $text2 ];echo $?
    5. 1 #正确则显示 0 ,反之为错误输出
    6. #因为二者不同,此举是比较不同字符串,所以命令正确,显示为 0
    7. [root@localhost ~]# [ $text1 != $text2 ];echo $?
    8. 0
    9. [root@localhost ~]# text3= #定义 text3,不输入内容
    10. #因为 text3 没有内容,此举是查看字符串内容为空
    11. [root@localhost ~]# [ -z $text3 ];echo $?
    12. 0
    13. [root@localhost ~]# [ -z $text2 ];echo $?
    14. 1

    条件逻辑测试操作

    —— 格式:[ 表达式1 ] 操作符 [ 表达式2 ]

    命令1 操作符 命令2

    选项注释
    -a 或 &&逻辑与,表示且的意思
    -o 或 ||逻辑或,表示或的意思
    逻辑否,取反

    短路与 &&

    全真才为真

    一假即为假

    —— 例:命令1 操作符 命令2 / [ 表达式1 ] 操作符 [ 表达式2 ]

    其中一个错则不执行,必须两个都是正确的才能执行

    短路或 ||

    一真即为真

    全假才为假

    —— 例:命令1 操作符 命令2 / [ 表达式1 ] 操作符 [ 表达式2 ]

    其中一个正确的就可以执行,必须两个都错才不执行

    组合写法

    先 短路与 后 短路或

    —— 只有这一种组合写法

    举例
    1. #上一条命令执行成功
    2. [root@localhost opt]# echo $?
    3. 0
    4. #等于0,执行成功,所以直接显示且(&&)后面的内容
    5. [root@localhost opt]# [ $? -eq 0 ] && echo "成功" || echo "失败"
    6. 成功
    7. #不大于0,执行失败,所以直接显示或(||)后面的内容
    8. [root@localhost opt]# [ $? -gt 0 ] && echo "成功" || echo "失败"
    9. 失败

    双中括号

    —— [[ ]] 加强版的单个 [ ] ,可以支持正则表达式和通配符(字符)

    [[ ]] 用法

    [[ == ]] :左侧字符串是否和右侧的 pattern 相同

    右侧接通配符

    [[ =~ ]] :左侧字符串是否能够被右侧的正则表达式的 pattern 所匹配

    右侧接正则表达式

    [[ != ]] :取反

    1. [root@localhost opt]# q=text.log
    2. [root@localhost opt]# [[ "$q" == *.log ]] ;echo $?
    3. 0
    4. [root@localhost opt]# [[ "$q" != *.log ]] ;echo $?
    5. 1
    6. [root@localhost opt]# [[ "$q" =~ *.log ]] ;echo $?
    7. 2
    8. [root@localhost ~]# w=text.sh
    9. [root@localhost ~]# [[ "$w" =~ sh$ ]];echo $?
    10. 0
    11. [root@localhost ~]# [[ "$w" =~ *.sh ]];echo $?
    12. 2
    13. [root@localhost ~]# [[ "$w" =~ *.sh$ ]];echo $?
    14. 2


    ( ) / { }

    —— 作用:二者都可以将多个命令组合在一起,批量执行

    —— ( ) :会开启子 shell

    —— { }:不会开启子shell


    if 语句的结构

    1. #单分支
    2. if 判断条件
    3. then
    4. 条件为真的分支代码       #当判断条件成立,执行一跳或多条命令
    5. fi                    #结尾
    6. #双分支
    7. if 判断条件
    8. then
    9. 条件为真的分支代码       #当条件判断成立时,可以执行一条或多条命令
    10. else
    11. 条件为假的分支代码       #当条件判断不成立时,可以执行一条或多条命令
    12. fi            
    13. #多分支
    14. if 判断条件1
    15. then
    16. 条件1为真的分支代码
    17. elif 判断条件2
    18. then
    19. 条件2为真的分支代码
    20. elif 判断条件3
    21. then
    22. 条件3为真的分支代码
    23. ......
    24. else
    25. 以上条件都为假的分支代码     #托底,当上述都不成立,执行一条或多条命令

    case 语句

    1. #格式
    2. case 变量名称 in
    3. 模式1)
    4. 命令序列
    5. ;;
    6. 模式2)
    7. 命令序列
    8. ;;
    9. .
    10. .
    11. .
    12. *)                     #不包含第一个变量内容与第二个变量内容的其他程序执行段
    13. 默认程序段
    14. ;;
    15. esac                   #结尾
    16. #注意
    17. 模式字符串中,可以用方括号表示一个连续的范围,如 "[0-9]";还可以使用竖杠 | 表示或,比如 a|b
    18. 最后的“)”表示默认模式,其中的相当于通配符

    脚本举例

    识别 yes 和 no 脚本

    1. #!/bin/bash
    2. read -p "请输入yes/no:" yn
    3. yn=`echo $yn|tr 'A-Z' 'a-z'` #无论 yes 或 no 怎么输入,都能识别;YeS On
    4. case $yn in
    5. yes|y)
    6. echo "识别为yes"
    7. ;;
    8. no|n)
    9. echo "识别为no"
    10. ;;
    11. *)
    12. echo "无法识别,重新输入"
    13. bash $0
    14. ;;
    15. esac
     
    
    检查磁盘使用情况脚本

    1. #!/bin/bash
    2. use=`df -h|grep boot|awk '{print $5}'|tr -d %`
    3. [ $use -gt 80 ] && echo "磁盘使用过高"||echo "磁盘使用正常"

    新建用户以及随机设置用户密码的脚本

    1. #!/bin/bash
    2. read -p "告诉我你要新建用户的名字:" name
    3. grep -q $name /etc/passwd
    4. if [ $? -eq 0 ]
    5. then
    6. echo "该用户已经存在了"
    7. exit
    8. else
    9. useradd $name
    10. pass=`cat /dev/random |tr -dc [[:alnum:]] |head -c 12`
    11. #进入到随机生成字符的文件中,并且删除所有的特殊符号,打印前 12 个字符
    12. echo $pass |passwd $name --stdin
    13. #将 $pass 执行的标准输出的结果,标准输入到 $name 定义的用户的 passwd 命令中,为该用户的密码
    14. echo $pass >> /opt/mima.txt
    15. #在 /opt 目录下新建文件 mima.txt 并将打印出来的前 12 个字符保存其中
    16. fi

    补充命令

    [RANDOM%3+1]

    —— 限制范围 1到 3

    ping 小脚本

    —— -W(大写):超过时间,默认单位秒

    —— -w :多少秒后停止 ping 操作

    —— -c :发送包的个数

    —— -i :发送的间隔时间

    1. $1=192.168.88.1               #定义 IP
    2. ping -c 3 -i 0.5 -W2 $1 &> /dev/null && echo "$1 online" || echo "$1 off"
    3. #ping $1 定义的 IP 次数 3 次,发送间隔时间为 0.5秒,超时 2秒 并将标准输出的信息放入垃圾箱,ping 成功显示 online ,失败则显示 off
    4. #注意 W 为大写

    make -j2

    —— 命令可以开启 2 个任务同时运行,并行构建大大加快构建速度

    df -h |grep boot|awk '{print $5}'|tr -d %

    —— awk :是一种文本处理工具,它可以用于从文件或标准输入中提取和操作数据。它以行为单位读取输入,并根据指定的规则进行处理

    —— print $5 :压缩空格,默认打印第五列

    grep -q

    —— 悄悄的执行命令,不显示

    id -u

    —— 判断当前用户是否为管理员

    文件表达式
    格式:选项 文件名作用
    -e如果文件存在,则为真
    -d如果文件为目录,则为真
    -f如果文件为常规文件,则为真
    -L如果文件为符号连接,则为真
    -r如果文件可读,则为真
    -w如果文件可写,则为真
    -x如果文件可执行,则为真
    -s如果文件长度不为0,则为真
    -h如果文件是软链接,则为真

  • 相关阅读:
    JS-树:深度优先搜索与广度优先搜索
    大语言模型基础-Transformer模型详解和训练
    seata-分布式事务
    【二进制部署k8s-1.29.4】五、kube-controller-manager安装配置
    Mac电脑卸载/删除nodejs
    【面试普通人VS高手】Kafka的零拷贝原理?
    分布式协调系统ZooKeeper实践与原理剖析
    【实用工具系列之爬虫】python爬取资讯数据
    金山云冲刺港股拟双重主要上市:年营收90亿 为雷军力挺项目
    Python 中的 4 个非常好用的自动化脚本
  • 原文地址:https://blog.csdn.net/WXALY/article/details/134544124