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

目录

  • 1. 运算符
  • 2. 条件判断
  • 3. 逻辑运算符
  • 4. 流程控制
    • 4.1 if分支
    • 4.2 case多分支
    • 4.3 for循环
    • 4.4 while循环
  • 5. 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 ~]# 

方式二:

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

方式三:

[root@bigdata001 ~]# echo $[2*3]
6
[root@bigdata001 ~]#
[root@bigdata001 ~]# a=2
[root@bigdata001 ~]# b=3
[root@bigdata001 ~]# echo $[$a*$b]
6
[root@bigdata001 ~]# 

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 ~]#

方式二:[ 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 ~]#

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

字符串的相等用=进行判断,不相等用!=进行判断,字符串是否为空用-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 ~]# 

按照文件权限进行判断

  • -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 ~]# 

按照文件类型进行判断

  • -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 ~]# 

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 ~]#

4. 流程控制

4.1 if分支

语法:

if [ 条件判断式 ];then
    程序
elif [ 条件判断式 ]
then
    程序
else
    程序
fi

示例:

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

4.2 case多分支

语法:

case $变量名 in
"值1")
    如果变量的值等于值1,则执行程序 1
;;
值2)
    如果变量的值等于值 2,则执行程序 2
;;
…...省略其他分支......
*)
    如果变量的值都不是以上的值,则执行此程序
;;
esac

示例:

[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 ~]# 

4.3 for循环

语法一

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

示例:

[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 ~]# 

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

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

语法二

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

示例:

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

4.4 while循环

语法:

while [ 条件判断式 ]
do
    程序
done

示例:

[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 ~]#

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 ~]# 

你可能感兴趣的:(Linux,运算符,条件判断,if,for,while)