• Centos7 Shell编程之运算符、条件判断、流程控制、read读取控制台输入


    1. 运算符

    方式一:使用expr命令

    [root@bigdata001 ~]# expr 2 \* 3
    6
    [root@bigdata001 ~]# echo $(expr 2 \* 3)
    6
    [root@bigdata001 ~]# echo `expr 2 \* 3`
    6
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    方式二:

    [root@bigdata001 ~]# echo $((2*3))
    6
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3

    方式三:

    [root@bigdata001 ~]# echo $[2*3]
    6
    [root@bigdata001 ~]#
    [root@bigdata001 ~]# a=2
    [root@bigdata001 ~]# b=3
    [root@bigdata001 ~]# echo $[$a*$b]
    6
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 条件判断

    方式一:使用test命令,为真则执行正常,为假则执行不正常

    [root@bigdata001 ~]# a=hello
    [root@bigdata001 ~]#
    [root@bigdata001 ~]# test $a = hello
    [root@bigdata001 ~]# echo $?
    0
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# test $a = Hello
    [root@bigdata001 ~]# echo $?
    1
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    方式二:[ condition ],condition前后要有空格

    [root@bigdata001 ~]# a=hello
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# [ $a = hello ]
    [root@bigdata001 ~]# echo $?
    0
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# [ $a = Hello ]
    [root@bigdata001 ~]# echo $?
    1
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意条件判断的=号前后也要有空格,否则会当成一个字符串,则判断为真

    字符串的相等用=进行判断,不相等用!=进行判断,字符串是否为空用-n "判断的字符串"进行判断

    整数之间的比较

    • -eq:等于(equal)
    • -ne:不等于(not equal)
    • -lt:小于(less than)
    • -le:小于等于(less equal)
    • -gt:大于(greater than)
    • -ge:大于等于(greater equal)

    示例:

    [root@bigdata001 ~]# [ 2 -gt 8 ]
    [root@bigdata001 ~]# echo $?
    1
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4

    按照文件权限进行判断

    • -r:有读的权限(read)
    • -w:有写的权限(write)
    • -x:有执行的权限(execute)

    示例:

    [root@bigdata001 ~]# ll
    总用量 28
    -rw-r--r--  1 root root       0 7月  20 22:15 test
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# [ -x /root/test ]
    [root@bigdata001 ~]# echo $?
    1
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    按照文件类型进行判断

    • -e:文件存在(existence)
    • -f:文件存在并且是一个常规的文件(file)
    • -d:文件存在并且是一个目录(directory)

    示例:

    [root@bigdata001 ~]# ll
    总用量 28
    -rw-r--r--  1 root root       0 7月  20 22:15 test
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# [ -d /root/test ]
    [root@bigdata001 ~]# echo $?
    1
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3. 逻辑运算符

    &&表示逻辑与,也可以用-a表示。只有第一个条件为真,才会进行第二个条件的判断
    ||表示逻辑或,也可以用-o表示。只有第一个条件为假,才会进行第二个条件的判断

    示例:

    [root@bigdata001 ~]# [ bulut ] && echo ok || echo not ok
    ok
    [root@bigdata001 ~]#
    [root@bigdata001 ~]# [ 20 -gt 18 -a 20 -lt 25 ]
    [root@bigdata001 ~]# echo $?
    0
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4. 流程控制

    4.1 if分支

    语法:

    if [ 条件判断式 ];then
        程序
    elif [ 条件判断式 ]
    then
        程序
    else
        程序
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    示例:

    [root@bigdata001 ~]# if [ 20 -gt 18 ];then echo ok;fi
    ok
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3

    4.2 case多分支

    语法:

    case $变量名 in
    "值1")
        如果变量的值等于值1,则执行程序 1
    ;;
    值2)
        如果变量的值等于值 2,则执行程序 2
    ;;
    …...省略其他分支......
    *)
        如果变量的值都不是以上的值,则执行此程序
    ;;
    esac
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    示例:

    [root@bigdata001 ~]# cat test.sh 
    #!/usr/bin/sh
    
    case $1 in
    "1")
        echo one
    ;;
    2)
        echo two
    ;;
    *)
        echo "其它数字"
    ;;
    esac
    
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# sh test.sh 1
    one
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4.3 for循环

    语法一

    for (( 初始值; 循环控制条件; 变量变化 ))
    do
        程序
    done
    
    • 1
    • 2
    • 3
    • 4

    示例:

    [root@bigdata001 ~]# cat test.sh
    #!/usr/bin/sh
    
    sum=0
    
    for (( i=0; i <= 100; i++ ))
    do
        sum=$[$sum+$i]
    done 
    
    echo $sum
    [root@bigdata001 ~]#
    [root@bigdata001 ~]# sh test.sh
    5050
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    这里能直接进行数值的比较,是因为在两个小括号(运算符)里面。例如:

    [root@bigdata001 ~]# if (( 3 > 2 )); then echo ok; fi
    ok
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3

    语法二

    for 变量 in 值 1 值 2 值 3 …...
    do
        程序
    done
    
    • 1
    • 2
    • 3
    • 4

    示例:

    [root@bigdata001 ~]# for i in {1..3}; do echo $i; done
    1
    2
    3
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.4 while循环

    语法:

    while [ 条件判断式 ]
    do
        程序
    done
    
    • 1
    • 2
    • 3
    • 4

    示例:

    [root@bigdata001 ~]# cat test.sh
    #!/usr/bin/sh
    
    i=1
    sum=0
    
    while [ $i -le 100 ]
    do
        let sum+=i
        let i++
    done
    
    echo $sum
    
    [root@bigdata001 ~]# sh test.sh
    5050
    [root@bigdata001 ~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    let语法的加减前后不能有空格

    5. read读取控制台输入

    语法:read (选项) (参数)

    • 选项:-p:指定读取值时的提示符;-t:指定读取值时等待的时间(秒),默认一直等待
    • 参数:指定接收读取值的变量名

    示例

    [root@bigdata001 ~]# cat test.sh 
    #!/usr/bin/sh
    
    read -p "请输入你的名字: " -t 10 name
    
    echo $name
    
    [root@bigdata001 ~]# 
    [root@bigdata001 ~]# sh test.sh
    请输入你的名字: zhang_san
    zhang_san
    [root@bigdata001 ~]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    图的应用:关键路径 ← PPT
    Java组合异步编程(1)
    Linux红帽(RHCE)认证学习笔记
    Keras CIFAR-10分类 SVM 分类器篇
    分类模型的Top 1和Top 5
    Vue面试题整理
    Sora-OpenAI 的 Text-to-Video 模型:制作逼真的 60s 视频片段
    【译】defer-panic-and-recover
    python扩展包安装失败解决方案
    Linux - 还不懂 gdb 调试器?(调试软件)
  • 原文地址:https://blog.csdn.net/yy8623977/article/details/125897997