1. 程式人生 > >shell程式設計——case語句

shell程式設計——case語句

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 correct input   


 
    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 accept Y,y,N,n,YES,yes,NO,no" >&2;;
[[email protected]
~]$ 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
[[email protected] ~]$ 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 not found"*

[[email protected] ~]$ vi test.sh

var=$(ls -l $1)      $()取命令輸出$1是命令列引數
echo "output is $var"

case $var in
"-rw-rw-r--"*) echo "this is not a execute file";;
"-rwxrwxr-x"*) echo "this is a execute file";
注意*在雙引號外邊
esac
[[email protected] ~]$ sh test.sh 22.txt
output is -rw-rw-r--  1 macg macg 15 Jun  9 19:00 22.txt
this is not a execute file

[[email protected] ~]$ chmod +x 22.txt
[[email protected] ~]$ sh test.sh 22.txt
output is -rwxrwxr-x  1 macg macg 15 Jun  9 19:00 22.txt
this is a execute file

    例2.匹配file命令輸出的一堆文字,以獲知檔案型別
用’ ’ 取輸出,然後用CASE+*對輸出做修飾處理.

[[email protected] ~]$ 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    
[[email protected] ~]$ sh test.sh 22.txt
output is 22.txt: ASCII text
this is a text file

[[email protected] ~]$ sh test.sh test-dir
output is test-dir: directory
this is a directory



      最典型的shell case命令匹配命令列,用於sys v啟動指令碼的start|stop|restart|status處理
  case   "[email protected]"   in    
([email protected] 字串陣列:以"引數1" "引數2" ... 的字串陣列形式儲存所有引數 
對於單個引數的情況,[email protected]就是一個字串)

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

相關推薦

shell程式設計——case語句

case語句格式 # vi test.sh:echo "input : "read numecho "the input data is $num"case $num in1) echo "January";;     雙分號結束2) echo "Feburary";;5)

shell程式設計-迴圈語句

一、for語句 for迴圈語句有兩種格式,分別如下: (一)for in語句 for var in list do commands done list代表要迴圈的值,在每次迴圈的時候,會把當前的值賦值給var(變數名而已,隨意定), 這樣在迴圈體中就可以直接通過$var獲

shell程式設計——if語句 if -z -n -f -eq -ne -lt

shell程式設計中條件表示式的使用 if  條件 then  Command else  Commandfi                              別忘了這個結尾 If語句忘了結尾fi test.sh: line 14: syntax erro

Shell Scripts - 條件語句case語句,function功能

有變 段落 hello 一個 包括 body idt keyword track 改動之前的代碼 1.推斷 $1 是否為 hello,假設是的話。就顯示 "Hello, how are you ?";

shell腳本中的邏輯判斷,文件目錄屬性判斷,if特殊用法,case語句

shell腳本中的邏輯判斷 文件目錄屬性判斷 if特殊用法 case判斷 筆記內容:20.5 shell腳本中的邏輯判斷20.6 文件目錄屬性判斷20.7 if特殊用法20.8/20.9 case判斷筆記日期:2017-11-2220.5 shell腳本中的邏輯判斷在所有的編程語言中都會有if

Shell 腳本應用(for、while、case語句應用)

passwd bre 更改 -- ... 分隔 空格 條件 重復 1、for :讀取不同的變量值,逐個執行同一組命令,直到取值完畢退出,變量值以空格分隔語法: for 變量值in 取值列表do命令done2、while :重復測試某個條件,成立則執行,進入下一個循環,直

shell腳本應用(三)for、while、case語句

姓名 std proc pgrep 符號 prefix dfa 先生 let 前言:當面對各種列表重復任務時,使用if語句已經難以滿足要求,而順序編寫全部代碼更是顯得異常繁瑣,困難重重。使用循環、分支等其他程序控制結構,從而能夠輕松完成更加復雜、強大的功能。1、使用for循

shell腳本編程學習筆記-case語句

linux shell 1.case結構條件語句語法 case語句實際上就是規範的多分支if語句 case “字符串變量”in 值1)指令1… ;; 值2)指令2… ;; *)指令3… esac 中文編程語法: case “找女朋友條件”in 有房)嫁給你… ;; 你爸是李剛)嫁給你… ;; 努力吃

03 shell編程之case語句與函數

使用 函數名 AC key body 語句 wid 編寫 util 本文所有內容均來自當年博主當年學習筆記,若有不足歡迎指正 Shell編程之case語句與函數 學習目標: 掌握case語句編程 掌握shell函數的使用 目錄結構: Case語句 Case語句的

shell流程控制語句 case

不常用 多個 流程 shell流程控制 ase 讀取 ext ffffff 提示符 linux的shell前前後後學了好幾遍了奈何記性不好,總是忘了,追主要的原因可能是不常用的原因吧!case開頭 esac結尾下面是結果輸入法不對 輸入的符號就不對,剛開始總錯,後來切換了

Shell語法—— case 條件語句

UNC functions restart 條件語句 lse init str ase shell語法 case 條件語句語法 case 條件語句語法格式為: case " 變量 " in 值 1)

Shell 程式設計》08_case 條件語句

《Shell 程式設計》08_case 條件語句 標籤(空格分隔): Shell 文章目錄 《Shell 程式設計》08_case 條件語句 8.1 case 條件語句的語法 8.2 case 條件語句實踐

Shell 程式設計》06_if 條件語句

《Shell 程式設計》06_if 條件語句 標籤(空格分隔): Shell 文章目錄 《Shell 程式設計》06_if 條件語句 6.1 if 條件語句的語法 6.1.1. 單分支結構 6.1.2. 雙

Shell程式設計-08-Shell中的迴圈語句

    迴圈語句常用於重複執行一條命令或一組命令等,直到達到結束條件後,則終止執行。在Shell中常見的迴圈命令有while、until、for和select等。 while語句 基礎語法 while <條件表示式> do 語句 done while迴圈讀取檔案 1、使用exe

bash程式設計case語句,函式

bash指令碼程式設計:之case語句   條件測試: 0: 成功 1-255: 失敗   命令: [ expression ] [[ expression ]] test expression

shell程式設計中select語句的使用

利用select語句可以非常方便的實現選單迴圈結構,其語法如下 select variable in list #將列表中的每一個選單項之前新增從1開始遞增的序號 #顯示環境變數PS3的值(存放的是引導使用者輸入的提示資訊) #使用者選擇的選單序號存在變數RE

shell程式設計之功能語句

1.以#開頭的語句是註釋。 最常見的是**#!/bin/sh**-------用於告訴os用哪種型別的shell來解釋執行該程式 2.read從標準輸入讀入一行,並賦值給後面的變數,其語法: (希望echo不換行 1.用echo -n 《內容》2.用#!/bin/sh echo “t

shell程式設計學習4改變語句執行的邏輯輸入輸出等

例項 使用分號; 依次執行,沒有邏輯關係 mkdir /newdir ; cd /newdir //新建並進入newdir 使用&& 與邏輯,一旦出現失敗後面命令不執行 make && make install //保證編譯完成後安裝

shell筆記之case語句

一般用於固定傳參指令碼 語法格式 case 變數 in 1) do ;; 2) do ;; *) exit esac 使用case列印選單 [[email prote

Shell程式設計-06-Shell中的if語句

    在任何一門語言中,判斷語句總是少不了,今天來學習一下Shell中的if語句。 基本語法 單分支情況 第一種語法 if <條件表示式> then 語句 fi 第二種語法 if <條件表示式>;then 語句 fi 其中條件表示式部分可以是tes