14 1,2 shell指令碼程式設計詳解 筆記

2021-08-16 20:16:42 字數 3329 閱讀 3879

shell有很多種指令碼:bash,csh,ksh等等。不同的shell語法不同。

指令碼中的#表示注釋,但是第一行中的#有特殊意義:

如果第一行中第乙個字元非#,表示這是乙個bash指令碼。第乙個字元是#,但第二個字元不是!,表示這是乙個csh指令碼。第乙個字元是#,且第二個字元是!,舉例,如果第一行為#!/usr/bin/python2.0表示呼叫其後指定的/usr/bin/python2.0程式來執行以下指令碼。

#!/bin/sh是bash的乙個軟鏈結。#!/bin/sh=#!/bin/bash

使用引數來傳遞內容:

$1,$2...表示該shell指令碼接收的第乙個和第二個引數,以此類推。

$# 表示實際呼叫該shell指令碼使用者輸入引數的數目

$? 表示shell指令碼中$?的上乙個命令是否成功執行.0成功,非0失敗。

$$ 表示該shell指令碼的程序id,即pid

使用命令來互動

read 讀入資料給變數 例子:read -p "please input your name:" aaa, -p表示先列印出字串 然後使用者輸入名字給aaa變數

echo 輸出資料

printf 輸出資料 printf與echo功能類似,printf控制的字元格式功能要多一些。例子 printf "/t hello world /t /n"

/root/backup.sh

./backup.sh

bash /root/backup.sh

.  /root/backup.sh

.  ./backup.sh

第三種與前兩種的差別是,c執行方式是在當前shell執行,a,b是開乙個子shell執行。如果是a,b兩種方式的話,在裡面有export x=2的指令碼,其父shell無法讀取x變數值。而c方式可以讀取指令碼裡面賦值的變數。通常在我們需要呼叫指令碼中的變數,函式時使用c方式。

,&&, ||

ifcase

[abc]   可能是a,b,c字元中的任乙個

[ abc ] 裡面兩邊有空格,判斷a,b,c變數的真假也就是是否有ascii碼的值,0為true,1為false

例子[ abc ],echo $?    顯示0

[  ],echo $?       中括號裡面是空值,顯示1

&& 表示前面值為真(即0)時執行&&右邊的命令,否則不執行右邊命令   

||      表示前面值為假(即1)時執行||右邊的命令,否則不執行右邊命令      

if使用例子

read aaa

if [ $aaa = feifei ]

then

echo hello feifei

elif[ $aaa = root ]

then echo hello root

else echo 'get out!'

fiif,then,elif,else可自由多次組合。

題外話bash -v  ./test.sh 起除錯作用,表示用bash執行./test.sh指令碼,執行過程可見.

bash -vx ./test.sh 可以看更詳細的除錯過程,-x可以顯示指令碼裡面各變數的值。

case多重判斷使用例子:

for迴圈使用

例項1#!/bin/bash

aaa=`pgrep httpd` --講httpd的程序idpid賦值給aaa

[-z "$aaa" ] && echo 'httpd is not running!' &&exit  --有可能aaa是多個pid加空格

for i in $aaa

dokill -9 $i  --do,done之間組成迴圈體

例項2for aaa in 111 222 333 /etc/profile.d/*.sh

doecho $aaa

done

例項3for aaa in `seq 1 100` --產生1到100序列,指令碼執行100次

doecho -n $aaa;  -- -n為連續輸出,不回車

sleep 1;        --休息一秒

done

while迴圈

例項1i=0

while [ $i -lt 100 ]

doi=$[$i+1]

echo -n "$i "

done

例項2while true

doread aaa

if[ "$aaa" = "exit" ]

then

break

fidone

until迴圈,與while的區別是條件為false時執行,為true時退出迴圈

例項i=0

until [ $i -gt 100 ]

doi=$[$i+1]

echo -n "$i "

done

函式的定義:

myfunction()

取消函式使用:

unset myfunction 或 unset 變數名

如何給函式傳遞引數和獲得返回值?bash中函式引數的定義並不需要在函式定義處就指定,而只需要在函式被呼叫時用bash的保留變數$1$2...來引用就可以了;bash的返回值可以用return語句來指定返回乙個特定的整數,如果沒有return語句顯示的返回乙個返回值,則返回值就是該函式最後一條語句執行的結果(一般為0,如果執行失敗返回錯誤碼)。return的返回值只能是0~256之間的乙個整數,函式的返回值在呼叫該函式的程式體中通過$?保留字來獲得。

例項1:計算平方的函式

square()

square $1

result=$?

echo $result

exit 0

Shell 指令碼程式設計

1 執行shell的方法 指定shell bin sh 由sh執行指令碼 指令碼總是由sh解釋 顯示呼叫shell sh scriptname 在當前shell中執行指令碼 profile profile是可執行的 ksh profile profile是不可執行的 改變當前的執行環境責應輸入.pr...

Shell 指令碼程式設計

a file 如果 file 存在則為真。b file 如果 file 存在且是乙個塊特殊檔案則為真。c file 如果 file 存在且是乙個字特殊檔案則為真。d file 如果 file 存在且是乙個目錄則為真。e file 如果 file 存在則為真。f file 如果 file 存在且是乙個...

shell指令碼程式設計

今天看看shell程式設計,記錄下期中與想象中不一樣的地方 0.注釋用 1.shell的變數賦值 your name zhm 在your name和等號中間不能有空格,這和別的語言很不一樣,那麼在使用變數時和別的語言也不一樣,要使用 your name,一般要用 一定是大括號 2.那麼如何把乙個變數...