shell程式設計(二)

來源:互聯網
上載者:User

5 while
迴圈次數的限制
foo=1                     //迴圈初值
while [ "$foo" -le 2 ]    //le :<=  while (foo<=2)
do
echo "ARE YOU THERE"
foo=$(($foo+1))           //這種形式很重要 foo++
done

6 until
until condition
do
statements
done
until 迴圈將反覆執行直到條件為真為止   而,while迴圈是在條件為真時才反覆執行

until who | grep "$1" > /dev/null
do
sleep 600
done
echo -e //a
echo "****$1 has just logged in ****"
exit 0
輸入:/bash/sh yzj
輸出:
-e
****yaozhangjun has just logged in ****

如果將 >/dev/null注釋掉,則是
yzj tty7         2009-10-19 09:59 (:0)
yzj pts/0        2009-10-19 10:00 (:0.0)
-e
****yaozhangjun has just logged in ****
此時才看到/dev/null的資源回收筒作用

7 case
case variable in
pattern [ |pattern ]...) statements ;;
...
esac

其實shell中的case 與C中的switch--case是一樣的
其中順序比較字串,而不會去找首選。
這也就導致了
case "$timeofday" in
*)   echo "Sorry,not be recognized";;
yes) echo "Good morning";;
no)  echo "Good afternoon";;
y)   echo "Good morning";;
n)   echo "Good afternoon";;
中無論輸入什麼都將執行sorry的原因

case "$timeofday" in
yes | y |Yes |YES ) echo "Good morning";;  //此處的 |不是管道而是邏輯或,要保持距離
n* | N* ) echo "Good afternoon";;           //雙引號注意
* ) echo "sorry";;

case "$timeofday" in
[yY] | [yY][eE][sS] )//注意距離 ,如果是 [yY] [eE] [sS]就不行了,為什麼不行的,因為我試過 Syntax error: word unexpected (expecting ")")
echo "Good morning"   //對於一種情況下的多條語句,只需在最後一條語句上添加;;即可
echo "Up bright and early this morning";;

2.6.4  函數
1 函式宣告時沒有傳回值,沒有形參類表
2 使用函數時可以直接使用函數名,或者直接帶上實參,不需要括弧
3 local將變數聲明為局部變數
4 通過return 命令讓函數返回數字組,讓函數返回字串值的常用方法是讓函數將字串儲存在一個變數中。
5 echo > fred 的效果和touch fred一樣就是建立一個空檔案
6 while : 代替while true 實現無限迴圈
7 break : 跳出當前迴圈(執行break語句的那個迴圈)
8 continue:跳出本次迴圈(當前迴圈的餘下部分依然執行)
9 . 命令
#classic_set.sh

version=classic
PS1="classic>"

#lastest_set.sh

version=lastest
PS1="lastest version>"

執行命令
$ . ./classic_set.sh
classic>
classic> . lastest_set.sh
lastest version> echo $version
lastest
通過這個實驗我覺得好像是. 代替了/bin/sh 而可以執行命令
10 在bash中 echo -n "hello "來刪除分行符號
11 eval :允許對參數進行求值
foo=10
x=foo
y='$'$x
echo $foo   10
echo $x     foo
echo $y     $foo

foo=10
x=foo
eval y='$'$x   其功能和 y=$(($x))是相同的
echo $foo   10 
echo $x     foo
echo $y     10
12 exit n
exit命令使指令碼程式一退出碼n結束運行。0表示成功
13 export
export命令將作為他參數的變數匯出到子shell中,並使之在子shellzhong youxiao .export把自己的參數建立為一個環境變數,而這個環境變數可以被其他指令碼和當前程式調用的程式看見。

#export2
echo "$foo"
echo "$bar"

#export1
foo="The first meta-syntactic variable"
export bar="The second meta-syntactic varibale"
export2

執行 $/bin/sh export2                  //願書用的是export1,執行後顯示export2 not found
                                                  //原本就是空行
The second meta-syntactic varibale   //說明bar的值被匯入到exprot2中了,而foo沒有

  e1     e2    e3
    |    |   |     |
    |  |     |   |
    ||       | |
  e2     e3
bar的值到e3依然不變,但是奇怪的是
  
   e1    e2    e3
    |    |       |  |
    |  |           ||
    ||               |
  e2            e2    

的時候,即便e1和e3中的bar值不同,e2中依然輸出的是e1中的
set -a 或者set -allexport將匯出它之後聲明的所有變數

14 set:為shell設定參數變數,需要使用輸出結果中的某個域
set $(date)
echo The month is $2   //等同於echo $(date +%B)
set用來提取位置參數

15 shift:將所有參數變數左翼一個位置,$3->$2.$4->$3 ,而原來$1的值將會被丟棄

while [ "$1" != "" ];do
echo "$1"
shift
done
執行:
$ /bin/sh shift1 a b c e
a
b
c
e

16 trap :用於在接受到訊號後採取的行動,在指令碼程式被中斷是完成清理工作。
trap command signal
command:接受到指定引號是要採取的行動
signal :處理的訊號名
command        作用
   -        重設某個訊號的處理條件到起預設值    
   ''       忽略某個訊號

就是下面的例子已經將我嚇得一愣一愣的了

trap 'rm -f /tmp/my_tmp_file_$$ ' INT

echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo "press interrupt to interrupt ..."
while [ -f /tmp/my_tmp_file_$$ ];do
echo File exists
sleep 1
done
echo The file no longer exists
當執行: /bin/sh trap1的時候
1 creating file /tmp/my_tmp_file_$$ ($$為隨即產生的數)
2  將當時的時間寫入
3  press interrupt to interrupt ...
4 File exists (每隔1妙出現一次)
5 CTRL+C
6 執行 INT 不僅中斷而且將/tmp/my_tmp_file_$$刪除

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.