目录
一、shell条件判断语句
1、字符串比较
2、算术比较
3、文件测试
二、if条件语句
1、单分支if语句
3、多分支if语句
三、select语句
四、case语句
五、case+if语句的使用
六、for循环
七、while循环
八、while+if语句的使用
一、shell条件判断语句
基本语法:[ condition ],注意[]前后都是有空格的,且条件非空即为true,如[ abc ]返回为true而[]返回为false
1、字符串比较
s1=s2 如果s1等于s2,则测试条件为真。
s1!=s2 如果s1不等于s2,则测试条件为真。
-n s1 如果字符串s1的长度大于0,则测试条件为真。
-z s1 如果字符串s1的长度等于0,则测试条件为真。
#!/bin/bash s1="hello" s2="hello" s3="world" #比较s1和s2两个字符串是相等,使用$?来判断,若相等输出的值应是0,不等就输出1. [ $s1 = $s2 ] echo $? [ $s1 = $s3 ] echo $? [ $s1 != $s3 ] echo $?
2、算术比较
| expr1 –eq expr2 | 若表达式expr1与expr2返回值相同,则结果为真 |
| expr1 –ne expr2 | 若表达式expr1与expr2返回值不同,则结果为真 |
| expr1 –gt expr2 | 若表达式expr1返回值大于expr2返回值,则结果为真 |
| expr1 –ge expr2 | 若表达式expr1返回值大于等于expr2返回值,则结果为真 |
| expr1 –lt expr2 | 若表达式expr1返回值小于expr2返回值,则结果为真 |
| expr1 –le expr2 | 若表达式expr1返回值小于等于expr2返回值,则结果为真 |
| !expr | 若表达式结果为假,则结果为真是 |
#!/bin/bash s1=10 s2=20 s3=30 s4=10 [ $s1 -eq $s4 ] #如果判断条件满足,$?会返回0,否则返回非0数 #采用$?返回的值与0进行比较,然后采用命令连接符打印对应的输出。 [ $? -ne 0 ] && echo "$s1不等于$s4" || echo "$s1等于$s4" [ $s1 -ne $s2 ] [ $? -ne 0 ] && echo "$s1等于$s2" || echo "$s1不等于$s2" [ $s1 -gt $s3 ] [ $? -ne 0 ] && echo "$s1小于$s3" || echo "$s1大于$s3" [ $s1 -lt $s2 ] [ $? -ne 0 ] && echo "$s1大于$s2" || echo "$s1小于$s2"
3、文件测试
| -d file | 若文件file是目录,则结果为真 |
| -f file | 若文件file是普通文件,则结果为真 |
| -r file | 若文件file可读,则结果为真 |
| -w file | 若文件file可写,则结果为真 |
| -x file | 若文件file可执行,则结果为真 |
| -s file | 若文件file大小不为0,则结果为真 |
| -a file | 若文件file存在,则结果为真 |
#!/bin/bash [ -d /home/tania/桌面/demo ] && echo "demo是一个目录" || echo "demo 不是一个目录" [ -x ./read.sh ] && echo "read.sh有执行权限" || echo "read.sh 没有执行权限" [ -e ./haha.sh ] && echo "当前目录下,haha.sh文件存在" || echo "当前目录下没有haha.sh文件"
二、if条件语句
1、单分支if语句
结构为:
if [条件语句];then
…
fi
例题:输入三个数,让他们按从小到大的顺序排列输出。
目录
一、shell条件判断语句
1、字符串比较
2、算术比较
3、文件测试
二、if条件语句
1、单分支if语句
3、多分支if语句
2、双分支if语句
结构为:
if [条件语句]; then
…
else
…
fi
例题:输入两个数,判断两个数是否相等。
#!/bin/bash read -p "请输入第一个数:" num1 read -p "请输入第二个数:" num2 if [ $num1 -eq $num2 ] then echo "输入的两个数相等" else echo "输入的两个数不相等" fi
3、多分支if语句
结构为:
if [条件语句];then
…
elif [条件语句]; then
…
…
else
…
fi
例题1:输入一个分数,如果分数在85-100分之间,输出成绩优秀,如果分数在60-84之间,输出成绩合格,60分以下输出成绩不合格;
#!/bin/bash read -p "请输入你的成绩分数(1-100分):" grade if [ $grade -ge 85 ] && [ $grade -le 100 ] then echo "成绩优秀!" elif [ $grade -ge 60 ] && [ $grade -le 84 ] then echo "成绩合格" else echo "成绩不合格" fi
例题2:判断输入的一个年份是否为闰年。(年号能被4整除且不能被100整除,或者能被400整除的为闰年。)例子论证:2004、2000、2020就是闰年,2008、1900就不是闰年。
#!/bin/bash read -p "请输入要判断的年份" year if [ $[$year % 4 ] -eq 0 ] && [ $[$year % 100] -ne 0 ] then echo "输入的年份$year 是闰年" elif [ $[$year % 400] -eq 0 ] then echo "输入的年份$year 是闰年" else echo "输入的年份$year 不是闰年" fi
三、select语句
select语句的格式如下:
select 变量 in 列表
do
…
[break]
done
select语句实质上也是一个循环语句,若不添加break关键字,程序将无法跳出select结构。
例题:制作一个目录,该目录包括市面上常用的操作系统,包括:Linux、Windows、Mac os、Unix、Android。从以上操作系统中选择一个你最喜欢的操作系统。
#!/bin/bash echo "请选择一个你最喜欢的操作系统" select os in "Linux" "Windows" "Mac os" "Unix" "Android" do echo "原来你最喜欢的操作系统是:$os " break done
四、case语句
case语句的格式如下:
case var in
选项1) …;;
'选项2') …;;
"选项3") …;;
…
*) …
esac
exit 0
例题:输入三个参数,执行加减乘除运算。其中第一个参数为运算符号,第二和第三个参数为运算值。
#!/bin/bash if [ $# -eq 3 ] then echo "参数个数为:$# ,参数分别是: $* " case $1 in +) num=`expr $2 + $3` ;; -) num=`expr $2 - $3` ;; x) num=$[ $2 * $3 ] ;; /) num=$[$2 / $3 ] ;; esac echo "运算表达式:$2 $1 $3 的结果为:$num " echo "运算结果=$num " fi
五、case+if语句的使用
例题:写一个脚本模仿剪刀石头布小游戏。
#!/bin/bash computer=$[RANDOM%3+1] #让电脑产生一个1-3的随机数 read -p "请猜拳:1、代表石头;2、代表剪刀;3、代表布" person case "$person" in 1) if [ $computer -eq 1 ] then echo "平局,你和电脑出的都是石头" elif [ $computer -eq 2 ] then echo "恭喜你,你赢了,电脑出的是剪刀" else echo "你输了,电脑出的是布" fi ;; 2) if [ $computer -eq 2 ] then echo "平局,你和电脑出的都是剪刀" elif [ $computer -eq 1 ] then echo "你输了,电脑出的是石头" else echo "恭喜你,你赢了,电脑出的是布" fi ;; 3) if [ $computer -eq 3 ] then echo "平局,你和电脑出的都是布" elif [ $computer -eq 1 ] then echo "恭喜你,你赢了,电脑出的是石头" else echo "你输了,电脑出的是剪刀" fi ;; esac
六、for循环
for循环的格式如下:
for 变量 in 变量列表
do
...
done
例题:打印一个9 x 9 的乘法口诀表。
#!/bin/bash
for i in `seq 9` #产生1-9的整数
do
for j in `seq $i`
do
echo -n "$i * $j = $[$i * $j] "
done
echo #起到一个换行的作用
done
七、while循环
while循环的格式如下:
while [ 表达式 ]
do
…
done
在while循环中,当表达式的值为假时,停止循环,否则循环将一直进行。此处表达式外的“[]”表示的是[命令,而非语法格式中的中括号,不能省略。
例题:求1-100整数的和。
#!/bin/bash i=0 sum=0 while [ $i -le 100 ] do sum=$[$sum + $i] let i++ done echo "1-100的整数和为:$sum "
八、while+if语句的使用
例题:猜数字游戏。
#!/bin/bash
computer=$[RANDOM%100+1] #让电脑产生一个1-100的随机数
times=0 #定义一个变量,存猜的次数
while true
do
read -p "请输入一个数字(1-100)以内" person
let times++
if [ $person -eq $computer ]
then
echo "恭喜你,猜对了!"
echo "你一共猜了$times 次"
exit 0
elif [ $person -gt $computer ]
then
echo "猜大了,请猜小一点"
else
echo "猜小了,请猜大一点"
fi
done
参考的博客有:1、Shell编程笔记_weixin_33858485的博客-CSDN博客
2、(81条消息) shell编程100例_baiduoWang的博客-CSDN博客_shell脚本编程100例



