(九)、Shell语句


一、shell判断语句

(1)、shell语言通过test、[]、[[]]命令进行条件的测试

(2)、根据条件的真、假执行不同的操作

1、if语句

if语句根据某个特定条件是否满足,来选择执行相应的语句,if语句中的条件判断

#!/bin/bash

read -p "Are you ok:(y/n)?" answer

if [[ $answer == [Yy] * || $answer == Maybe ]]
then
   echo "Glab to hear it."
fi
#!/bin/bash

num1=30
num2=40

if (( $num1 > $num2 ))
then
   echo "num1>num2"
else
   echo "num1<num2"
fi
#!/bin/bash

read -p "Are you ok:(y/n)?" answer

if [[ $answer == y ]]
then
   echo "yes"
elif [[ $answer == n ]]
then
   echo "no"
else
   echo $answer
fi

2、case语句

(1)、case行尾必须为单词“in”,每一个模式必须以右括号“)”结束

(2)、双分号“;;”表示命令序列结束

(3)、匹配模式中可是使用方括号表示一个连接的范围,如[0-9];使用竖杠符号“|”表示或

(4)最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列

#!/bin/bash

read -p "Input a character:" value
case $value in
   [a-z][A-Z])
      echo "You input a letter."
      ;;
   [0-9])
      echo "You input a digit."
      ;;
   *)
      echo "You input a special value"
      ;;
esac

二、循环语句

(1)、循环语句用于将一个或一组命令执行指定的次数,或一直执行直到满足某个条件为止

(2)、Bash shell提供了3种类型的循环:for循环、while循环、until循环

1、for循环

for命令后面跟一个用户自定义的变量、关键字in和一个集合。执行第一轮循环时,现将集合中的第一个元素赋给变量,并把该元素从集合中移走,然后进入循环体,执行关键字do和done之间的命令。下一次进入循环时,则将第二个元素赋给变量

#!/bin/bash

for person in Tom Jack Peter
do
   echo "Hi $person"
done
#!/bin/bash

for user in Tom $(cut -d':' -f1 /etc/passwd)
do
   echo "Hi $user"
done

注:cut和awk一样,-d是按:进行分割,-f1取第一个字段

#!/bin/bash

for file in $*
do
   if [[ -f $file && ! -x $file ]]
   then
      chmod u+x $file
      echo $file now has execute permission
   fi
done

注:$*表示所有的参数,执行file命令后跟的所有参数;-f判断是否文件;-x判断是否可执行;代码可优化,将“$*”改为“$(ls)”

2、while语句

(1)、while循环命令对紧跟在它后面的条件(命令)进行判断,如果该条件为真,就执行循环体内的命令(即关键字do和done之间的命令)

(2)、执行到关键字done后,控制回到循环的顶部,while命令再次检查该条件,循环将一直持续下去,直到while检测到条件为假

#!/bin/bash

declare -i num=0
while (( $num<10 ))
do
   echo -n "$num"
   len num+=1
done
echo -e "\nLoop exits!"
#!/bin/bash

echo "Where does Yao come from?"
read answer
while [[ "$answer" != "China" ]]
do
   echo "Wrong try again!"
   read answer
done
echo "You got it!"

3、until语句

使用until循环语句时,首先执行条件测试并判断其返回值,若条件不成立则执行循环,一直到该测试条件成立时为止,即退出循环

#!/bin/bash

until who | grep root
do
   sleep 5
done
echo "root is loging"

注:who查看用户登录;sleep 5等待5秒

4、循环控制

(1)、break命令:用于退出循环

(2)、continue命令:用于退出本次循环,跳转至循环语句的顶部重新测试条件

#!/bin/bash

while true
do
   echo "Input your password: "
   read password
   if [[ "$password" == "123321" ]]
   then
      break
   else
      echo "Password error!"
   fi
done

echo "Welcome!"

注:while true是一个死循环

#!/bin/bash

for name in good1 good2 bad good3
do
   if [[ $name == "bad" ]]
   then
      continue
   else
      echo "Hello $name"
   fi
done

5、shift命令

执行shift命令后,位置变量($1~$9)中的命令行参数会依次向左传递

#!/bin/bash

sum=0
while [ $# -gt 0 ]
do
   let sum=sum+$1
   shift
done
echo "The sum is: $sum"

注:$#代表参数个数;-gt 0代表大于0

6、select命令

(1)、select命令用于创建菜单,按数字顺序排列菜单项并将列表显示在标准输出上面,并提示用户输入,使用变量PS3指定提示语

(2)、select命令是一个循环命令,需要使用break退出循环,或使用exit退出脚本程序

#!/bin/bash

PS3="Select a program to execute:"
select program in 'ls -F' pwd date
do
   $program
   # break
done

7、函数-使用规则

(1)、函数必须先定义,后使用

(2)、函数在当前环境中运行。函数共享调用它的脚本中的变量,允许以给定位置参数赋值的方式向函数传递参数

(3)、使用local功能在函数内部创建局部变量

(4)、如果在函数中使用exit命令,就会退出整个脚本。如果只是从函数中退出,就只是返回到脚本调用函数的地方

(5)、函数中的return语句,返回函数执行的最后一条命令的退出状态,或返回指定的参数值

(6)、使用命令export -f可以把函数导出到子shell中

(7)、使用declare -f命令可以列出函数名以及其定义,使用declare -F命令只列出函数名

(8)、如果函数保存在其他文件中,可以用souce或“.”命令把它们载入到当前脚本中

(8)、函数支持递归调用,且递归调用次数没有限制

#!/bin/bash

#Say hello to the first parameter

function sayhello {
   echo "Hello $1"
}

sayhello $1
#!/bin/bash

#Say hello to the first parameter

sayhello() {
   echo "Hello $1"
}

sayhello $1

(9)、消除某个函数,使用unset命令

  • 格式:unset 函数名

(11)、可以将函数导出,使它们在子shell中可以使用

  • 格式:export -f 函数名

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小鹿快跑~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值