Linux shell脚本编程(控制结构)

目录

一、shell条件判断语句

1、字符串比较

2、算术比较

3、文件测试

二、if条件语句

1、单分支if语句

2、双分支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

若表达式expr1expr2返回值相同,则结果为真

expr1 –ne expr2

若表达式expr1expr2返回值不同,则结果为真

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

参考的博客有:1、​​​​​​Shell编程笔记_weixin_33858485的博客-CSDN博客

2、(81条消息) shell编程100例_baiduoWang的博客-CSDN博客_shell脚本编程100例

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tania-you

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值