- 一、if else 语句
- 1.1、三种语法
- 1.1.1、单个if语法:
- 1.1.2、if else语法:
- 1.1.3、if elif... else语法
- 二、case in语句
- 三、while语句
- 4.1、单行while语法
- 4.2、多行while语法
- 4.3、死循环
- 四、until语句
- 五、for语句
- 5.1、循环方式一
- 5.2、循环方式二
- 5.3、循环方式三
- 5.4、死循环
- 六、select语句
- 5.4、死循环
- 六、select语句
介绍:if else语句和其他编程语言中的if else一样,都是用于逻辑判断
1.1、三种语法 1.1.1、单个if语法:if 条件 then 命令 fi1.1.2、if else语法:
if 条件 then 命令 else 命令 fi1.1.3、if elif… else语法
if 条件1
then
命令
elif 条件2
then
命令
elif 条件3
then
命令
...
else
命令n
fi
示例一:普通的if多分支写法
#bin/bash
read -p "请输入您的考试成绩:" score
if ((${score} >=0 && ${score} <60 ))
then
echo "您的考试成绩是:${score},不及格"
elif ((${score} >=60 && ${score} <70 ))
then
echo "您的考试成绩是:${score},及格"
elif ((${score} >=70 && ${score}<80))
then
echo "您的考试成绩是:${score},中等"
elif ((${score} >=80 && ${score}<90))
then
echo "您的考试成绩是:${score},良好"
elif ((${score} >=90 && ${score}<=100))
then
echo "您的考试成绩是:${score},优秀"
else
echo "您输入的考试成绩不合法"
fi
结果:
示例二、if else 单行写法
if((1==1));then echo "条件成立";else echo "条件不成立";fi
示例三、if结合逻辑运算符和shell程序退出状态码
每个linux执行命令执行完成后都会有一个退出状态码,一般我们使用$?获取退出状态码,可以结合if语句,来实现我们的一些需求,退出状态码为0代表执行成功,非0代表执行失败,不过也有一些特殊的命令0和非代表的不是成功和失败,比如diff比较两个文件是否有差别的时候,0是代表没有差别,当有差别的时候会返回非0。
演示if语句加退出状态码加逻辑运算符实现我们的需求
#bin/bash
read -p "请输入文件全名:" file_name
read -p "请输入数据:" data
if [[ -w ${file_name} && -n ${data} ]]
then
echo ${data} > ${file_name}
echo "文件写入成功"
else
echo "文件写入失败"
fi
结果
注意:
其中:-w ${file_name} 执行状态码为0 ,-n ${data} 执行状态码也为0,两个条件逻辑与之后,条件为true
示例四、if语句结合test命令
首先我们对test命令进行介绍
shell中的test命令用于检查某个条件是否成立,它可以进行数值、文件、字符串三个方面进行测试
功能和单方括号[]一样。
语法:
if test 数字1 options 数字2 then 执行命令 fi
test用于整数比较测试
options参数
test用于字符串比较测试
options参数
#bin/bash
name1=zhangsan
name2=lisi
if test $name1 != $name2; then
echo "name不相等"
fi
if test -n $name1; then
echo "name长度不为0"
fi
test用于文件比较测试
options参数
这里和整数,字符串比较用法一样,此处就不演示了。
二、case in语句介绍:case in 语句为多分支语句,可以用来多分支判断,用于匹配一个值与一个模式,如果匹配成功,则执行相应的语句。当分支较多的时候,并且判断条件简单,可以用case in语句。
语法:
case 值 in
匹配模式1)
命令1
命令2
...
;;
匹配模式2)
命令1
命令2
...
;;
匹配模式3)
命令1
命令2
...
;;
*)
命令1
命令2
...
;;
esac
注意:每一种匹配模式必须以)结尾,匹配模式可以为常量或者变量值,当发现满足某个匹配模式后会执行相应的语句,以;;结尾,;;类似于break的作用,;;执行完成之后,不会再去执行其他匹配模式里面的命令,如果没有匹配,则执行最后一个*),最后一个匹配模式,类似于兜底的作用,esac则代表语句结束。
其中匹配模式可以为一个数字,字符串,或者是一个正则表达式
但是匹配模式只支持简单的正则表达式,如下:
演示:
#bin/bash read -p "请输入一个0-7的数字:" number case $number in 1) echo "今天是星期一" ;; 2) echo "今天是星期二" ;; 3) echo "今天是星期三" ;; 4) echo "今天是星期四" ;; 5) echo "今天是星期五" ;; 6) echo "今天是星期六" ;; 0|7)#这里用到了简单的正则匹配 echo "今天是星期日" ;; *) echo "您输入的数字无效" esac
结果:
介绍:while用于循环一系列的语句
两种语法
4.1、单行while语法while 条件;do 命令;done4.2、多行while语法
while 条件 do 命令1 命令2 命令3 ... continue;#while中continue用于跳出当前这一次循环,进入下一次循环 break;#break用于结束整个循环 done
演示:
#bin/bash
read -p "请输入一个数字:" number
i=0
while ((i<=$number))
do
let i++
if ((i==3)); then
echo "跳过"
continue;
fi
if ((i==5)); then
echo "退出"
break;
fi
echo "hello${i}"
done
结果:
while : do 命令 done #或者 while true do 命令 done四、until语句
介绍:until语句和while语句正好相反,当条件为false的时候会一直循环,当条件为true的时候,结束循环
语法:
until 条件 do 命令 done
演示:
#bin/bash
read -p "请输入一个数字:" number
i=0
until ((i>number))
do
let i++
echo "循环第${i}次"
done
结果:
介绍:for循环和其他编程语言的用法一样,都是用于循环语句中
5.1、循环方式一语法:
单行语法:
for item in array;do 命令1;命令2;done
多行语法:
for item in array do 命令 done
item 代表循环变量,array代表数组或者一系列的枚举值
演示:
#!/bin/bash
array=(1 2 3 4 5 6)
for item in ${array[@]}
do
echo "$item"
done
结果:
语法:
单行语法:
for item in {start..end};do 命令;done
多行语法:
for item in {start..end}
do
命令
done
其中:
start:起始范围
end:结束范围
注意:start和end两个值必须为整数
演示:
#!/bin/bash
#bin/bash
for item in {1..10}
do
echo "$item"
done
结果:
语法:
单行语法:
for((i=start;i<=end;i++));do 命令;done
多行语法:
for((i=start;i<=end;i++)) do 命令 done
演示:
#!/bin/bash
array=(1 2 3 4 5 6)
for (( i = 0; i < ${#array[*]}; i++ )); do
echo "${array[i]}"
done
结果:
语法:
for((;;)) do 命令 done六、select语句
介绍:select语句用来进行菜单的选择输入,select语句增强交互性,可以选择带编号的菜单,输入不同的编号显示不同的菜单,并执行不同的功能,select适合终端交互,是shell独有的循环。
语法:
select menu in menu1 menu2 menu3...menun do 命令 done
注意:select是死循环,输入空值,或者输入的值无效都不会终止循环,只有碰到break才会终止循环,命令执行的时候,会输出#?表示可以选择不同的编号。
演示:
#!/bin/bash select item in "唱" "跳" "rap" "篮球"; do echo $item done echo "您的爱好是$item"
EkiTBo9S-1656827145645)]
5.4、死循环语法:
for((;;)) do 命令 done六、select语句
介绍:select语句用来进行菜单的选择输入,select语句增强交互性,可以选择带编号的菜单,输入不同的编号显示不同的菜单,并执行不同的功能,select适合终端交互,是shell独有的循环。
语法:
select menu in menu1 menu2 menu3...menun do 命令 done
注意:select是死循环,输入空值,或者输入的值无效都不会终止循环,只有碰到break才会终止循环,命令执行的时候,会输出#?表示可以选择不同的编号。
演示:
#!/bin/bash select item in "唱" "跳" "rap" "篮球"; do echo $item done echo "您的爱好是$item"
结果:



