歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

shell語法使用

shell語法使用     這兩天初次接觸shell編程,所謂shell編程其實就是用一定的語法將各種基本的命令組合起來,讓shell程序去解釋執行。如果對windows的dos有了解,可以這樣理解,其實shell腳本文件和.bat批處理文件差不多,不過linux下的shell比起windows的dos強大很多。     shell有很多種,如bash、sh 、tcsh、 ksh等,linux系統裡面默認使用的是bash。     下面看一下學習shell的第一個程序:     輸入命令vi my_01.sh,創建一個my_01.sh文件並用vi編輯器打開。編輯內容如下:     1 #!/bin/bash 2 echo "aaaa" 3 echo "第一次接觸shell"     這裡第一行是指讓bash這個shell去執行這個shell程序。echo是用來輸出的,第二行和第三行分別輸出兩句話。   執行這個shell程序可以用如下幾種方法:     1  ./my_01.sh     2  . my_01.sh     3  bash my_01.sh   注:新創建的文件默認是沒有執行權限的,所以必須給該文件授予執行權限後才能執行。授權命令:chmod u+x my_01.sh或者chmod 755 my_01.sh     下面是第二個shell程序:     1 #!/bin/bash 2 #my_02.sh 3 read -p "please input your name:" name 4 echo "$name,welcome!"     這裡第三行read命令是指等待用戶輸入,-p後面是指提示,它還有一個參數-t是設置等待時間的。這個程序運行結果如下:   [liuling@bogon test]$ ./my_02.sh  please input your name:liuling liuling,welcome!     注:第四行echo使用的是雙引號,如果使用單引號的話,則這句就會直接輸出 $name,welcome! 。雙引號是可以解析裡面的變量的,而單引號則不行。   下面看看shell腳本的語法:   一、條件判斷if else的使用   if分支語句的寫法:     if 條件測試     then 滿足條件執行什麼     else 不滿足條件執行什麼 fi   多分支寫法:     if 條件1     then      執行命令2 elif 條件1     then      執行命令2 else     執行命令3 fi      注:if和fi要配對,以fi結束這個條件判斷。在不滿足第一個條件下再判斷使用的是elif,而不是else if。then必須獨占一行。    下面看幾個例子:      1 #!/bin/bash  2 #my_03.sh  3   4 read -p "pelease input your name:" name  5 read -p "pleaase input your password:" passwd  6 #if test $name = "liuling"   7 if [ $name = "liuling" -a $passwd = "lz19921009" ]  8 then  9     echo "登錄成功!" 10 else 11     echo "登錄失敗!" 12 fi      1 #!/bin/bash  2 #my_04.sh  3   4 read -p "please input your score:" score  5   6 if [ $score -gt 90 ]  7 then  8     echo "優秀!"  9 elif [ $score -gt 80 -a $score -le 90 ] 10 then 11     echo "良好!" 12 else 13     echo "一般!" 14 fi      1 #!/bin/bash  2 #my_05.sh  3   4 read -p "please input your score:" score  5 #如果使用(())的話,只能用< > >= <=  6 if (( $score > 90 ))  7 then  8     echo "優秀!"  9 elif [[ $score -gt 80 && $score -le 90 ]] 10 then 11     echo "良好!" 12 else 13     echo "一般!" 14 fi     測試用戶輸入的文件名是目錄還是文件:      1 #!/bin/bash  2 #my_06.sh  3   4 read -p "請輸入一個目錄或者文件名:" name  5 if [ -z $name ]  6 then  7     echo "你輸入的信息為空!"  8 else  9     if [ -f $name ] 10     then 11         echo "這是一個文件!" 12     elif [ -d $name ] 13     then 14         echo "這是一個目錄!" 15     else 16         echo "不存在這樣一個目錄或者文件!" 17     fi 18 fi         這三個例子都是關於if條件判斷的用法。條件有這麼幾種寫法:[ 條件 ]、test 條件、[[ 條件 ]]、(( 條件 )),用的最多的是第一種。常用判斷符號如下   ①、邏輯運算符     -a  expr1 -a expr2  邏輯與     -o  expr1 -o expr2  邏輯或     !  !expr1      邏輯非   ②、數值判斷     -eq  num1 -eq num2  是否相等     -ne  num1 -ne num2  是否不相等     -gt  num1 -gt num2  是否大於     -ge  num1 -ge num2  是否大於等於     -lt  num1 -lt num2  是否小於     -le  num1 -le num2  是否小於等於   ③、字符串判斷     =  str1 = str2  字符串是否相等     !=  str1 != str2  字符串是否不等     -n  -n str1    字符串長度是否不等於0     -z  -z str2    字符串長度是否等於0   ④、文件判斷     -r  -r filename  文件是否存在且可讀     -w  -w filename  文件是否存在且可寫     -s  -s filename  文件是否存在且長度非0     -f  -f filename  文件是否存在且是普通文件     -d  -d filename  文件是否存在且是一個目錄         在使用條件判斷的時候一定要注意空格,如if [ $name = "liuling" -a $passwd = "lz19921009" ],[]裡面前後要有一個空格,所有的判斷符號以及邏輯運算符號前後都要有空格,否則會報錯。使用[[ 條件 ]]的時候只能使用"&&"符號作為邏輯與來代替"-a",如果使用(( 條件 ))的話,只能用< > >= <=符號,而不能使用“-eq”等符號。   二、case的用法     這裡的case優點類似於java中的swith case   case語法如下:     case var in pattern 1)     執行語句1     ;; pattern 2)     執行語句2     ;; pattern 3)     執行語句3     ;; *)     執行語句4     ;; esac   注意:*)指匹配其他任意字符串          每種情況都以;;結束   下面是幾個case用法的例子     1.模擬菜單的選擇      1 #!/bin/bash  2 #my_07.sh  3   4 echo "1 - 普通顯示"  5 echo "2 - 詳細顯示"  6 echo "3 - 顯示隱藏文件"  7 echo "4 - 推出"  8   9 read -p "請選擇操作號:" num 10 case $num in 11     1)  12         ls ;; 13     2) 14         ls -l ;; 15     3) 16         ls -al ;; 17     4) 18         exit ;; 19     *) 20         echo "請輸入正確的操作(1--4)"  21         exit ;; 22 esac       三、循環語句的使用   1、for循環     for 變量名 in 取值列表 do     命令序列 done     下面是for循環使用的小例子:      1 #!/bin/bash  2 #my_08.sh  3   4 for a in `seq 1 3 10`  5 do  6     echo $a  7 done  8 echo "-------------------"  9 for ((i=1;i<=10;i++)) 10 do 11     echo $i 12 done     這裡第四行使用了`seq 1 3 10`,``是反引號,也就是鍵盤上Esc下面的一個鍵,``裡面可以寫執行命令,把執行後的結果返回。     seq命令是指序列,seq start size max,start是起始,size是步長,max就是限制的數,比如seq 1 3 10,則返回的是1 4 7 10。     第9行代碼也有點特別,有點像java裡面的for循環,不過是雙重小括號,在shell中這樣也是可以的。     下面是一個統計文件數目的小程序:      1 #!/bin/bash  2 #my_09.sh  3   4 i=0  5 for name1 in `ls /etc`  6 do  7    # i=`expr $i + 1`  8    # let i++  9    # i=$[$i + 1] 10    # i=$(($i + 1)) 11    ((i++)) 12  13 done 14 echo "文件總數為:$i"     注:7、8、9、10、11行是數字自增的不同寫法,都可以。   2、while循環     while 條件 do     命令序列 done   下面是一個錄入客戶資料的shell腳本:      1 #!/bin/bash  2 #my_10.sh  3   4 while true  5 do  6         echo "登記客戶資料(c繼續,q退出):"  7         read choice  8   9         case $choice in 10                 c) 11                         echo "請輸入客戶名字:" 12                         read name1 13                         echo "請輸入客戶年齡:" 14                         read age1 15                         echo "姓名:"${name1}" - 年齡:"${age1} >>customer.txt 16                         ;; 17                 q) 18                         exit 19                         ;; 20         esac 21 done   注: >>是指重定向,將標准輸出重定向到其他的輸出流中,如上面15行是指將標准輸出重定向到customer.txt文件。所以echo輸出的內容會輸出到customer.txt文件中去。   >> 和 > 區別   >>customer.txt 追加保存到customer.txt文件中, 如果文件不存在會自動創建。   >customer.txt 就會重新寫入, 覆蓋原有的數據       四、函數的應用     function 函數名(){   } or 函數名(){   }   函數調用: 函數名 函數名 參數1 參數2   下面是一個小例子程序:     1 #!/bin/bash 2 #fun.sh 3 function add(){ 4     echo $(($1+$2)) 5 } 6 add 20 30 7 add 20 90  
Copyright © Linux教程網 All Rights Reserved