shell编程——case语句

最近工作中用到shell脚本,遂学习之,看到好的文章,转来和大家分享,原文地址:点击打开链接

case语句格式

# vi test.sh
:
echo "input : "
read num
echo "the input data is $num"

case $num in
1) echo"January";;    双分号结束
2) echo "Feburary";;
5) echo"may"         每个case可以有多条命令      
   echo "sdfd"
   echo"sdf";;       但最后一条命令一定是双分号结束

*) echo "not correct input";;   *)是其他值、default的意思     

esac   
# sh ./test.sh
input :
2
the input data is 2
Feburary

# sh ./test.sh
input :
ter
the input data is ter
not correctinput   

 

      case 语句如果某个选项没有任何语句,也要加;;否则会出下边错误
test: line 166: syntax error near unexpected token `)'
test: line 166: `"system hostname config")'


      为什么输入no,仍不匹配到[no]
原来[]是专门针对 单字符的值,如果用[no],就是n和o之一
case $yn in  
 [no]) return 1;;
  * )  echo "only acceptY,y,N,n,YES,yes,NO,no">&2;;
[macg@mac-home ~]$ sh test.sh
enter y/n :
no                          
only accept Y,y,N,n,YES,yes,NO,no
改正
case $yn in  
  no) return 1;;
  NO) return 1;;
  * ) echo "only accept Y,y,N,n,YES,yes,NO,no">&2;;
 esac
[macg@mac-home ~]$ sh test.sh
enter y/n :
no                            


      一个getyn()函数的例子
getyn( )
{
while echo "enter y/n:"
do
 read yn
 case $yn in
  [Yy]) return 0 ;;
  yes) return 0 ;;
  YES) return 0 ;;
  [Nn]) return 1 ;;
  no) return 1;;
  NO) return 1;;
  * ) echo "only accept Y,y,N,n,YES,yes,NO,no";;
 esac
done
}
if
getyn 调用函数     以函数作为if条件,必须用if command法
then    注意0为真
echo " your answer is yes"
else
echo "your anser is no"
fi   


      if, case,匹配字符串最常见,但如何匹配一段很长的输出,一堆文字?最好方法,用“*”,如:*"command notfound"*
[macg@machome ~]$ vi test.sh

var=$(ls -l$1)     $()取命令输出$1是命令行参数
echo "output is $var"

case $var in
"-rw-rw-r--"*) echo "thisis not a execute file";;
"-rwxrwxr-x"*) echo "thisis a execute file";
注意*在双引号外边
esac
[macg@machome ~]$ sh test.sh 22.txt
output is -rw-rw-r--  1 macg macg 15Jun  9 19:00 22.txt
this is not a execute file

[macg@machome ~]$ chmod +x 22.txt
[macg@machome ~]$ sh test.sh 22.txt
output is -rwxrwxr-x  1 macg macg 15Jun  9 19:00 22.txt
this is a execute file
      例2.匹配file命令输出的一堆文字,以获知文件类型
用’ ’ 取输出,然后用CASE+*对输出做修饰处理.
[macg@machome ~]$ vi test.sh

var=`file$1`        `和$()作用相同,是取命令输出
echo "output is $var"

case $var in
"$1: ASCII text"*) echo "this is a text file";;
"$1: directory"*) echo "this is a directory";;
注意*在双引号外边
esac    
[macg@machome ~]$ sh test.sh22.txt
output is 22.txt: ASCII text
this is a text file

[macg@machome ~]$ sh test.sh test-dir
output is test-dir: directory
this is a directory


        最典型的shell case命令匹配命令行,用于sysv启动脚本的start|stop|restart|status处理
  case    "$@"    in       
($@ 字符串数组:以"参数1" "参数2" ...的字符串数组形式保存所有参数 
对于单个参数的情况,$@就是一个字符串)

  start)       
                  echo    -n    "Starting    firewall..."       
                  。。。   
                  echo    "OK!"       
                  exit         
                  ;;       
  stop)       
                  echo    -n    "Stopping    firewall..."
                  。。。     
                  exit         
                  ;;     
restart     
                  $0  stop    $0即执行原始程序           
                  $0  start       
                  ;;       
status)       
                  clear       
                  echo    ">------------------------------------------"       
                  iptables    -L       
                  echo    ">------------------------------------------"       
                  iptables    -t    nat    -L    POSTROUTING       
                  exit       
        *)       
                  echo    "Usage:    $0    {start|stop|restart|status}"       
                  exit         
  esac   

shell编程中,case语句用于根据给定的值或模式进行多个条件的匹配。它的作用类似于其他编程语言中的switch语句。 一个例子是,我们可以使用case语句来判断用户输入的字符属于字母、数字还是特殊符号。例如,我们可以使用以下代码来实现这个功能: ``` #!/bin/bash read -p "请输入一个字符:" key case $key in [a-z]|[A-Z]) echo "你输入的是字母" ;; [0-9]) echo "你输入的是数字" ;; *) echo "你输入的是特殊符号" ;; esac ``` 在这个例子中,我们使用了case语句来匹配用户输入的字符。如果字符是字母,则输出"你输入的是字母";如果字符是数字,则输出"你输入的是数字";如果字符是其他特殊字符,则输出"你输入的是特殊符号"。通过这种方式,我们可以根据不同的情况执行不同的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Shell 编程case 语句](https://blog.csdn.net/weixin_38787592/article/details/124623468)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [shell脚本编程case语句学习笔记](https://download.csdn.net/download/weixin_38719635/12846606)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Shell编程——case语句与循环语句](https://blog.csdn.net/LS19990712/article/details/101280426)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值