目录
一、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
例题:输入三个数,让他们按从小到大的顺序排列输出。
!/bin/bash
read -p "请输入一个整数:" num1
read -p "请输入一个整数:" num2
read -p "请输入一个整数:" num3
tmp=0
if [ $num1 -gt $num2 ]
then
tmp=$num1
num1=$num2
num2=$tmp
fi
if [ $num1 -gt $num3 ]
then
tmp=$num1
num1=$num3
num3=$tmp
fi
if [ $num2 -gt $num3 ]
then
tmp=$num2
num2=$num3
num3=$tmp
fi
echo "按升序从小到大依次为:$num1 > $num2 > $num3"
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