1. 程式人生 > >Shell簡單程式設計學習之一

Shell簡單程式設計學習之一

該練習是在Bourne Again Shell (/bin/bash)環境下進行
連結

  • 變數

    • 輸出
    #!/bin/bash
    echo "Hello World!"
    

    通過修改檔案許可權,chmod +x /test.sh,使用./test.sh呼叫
    輸出:Hello World!

  • 命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。
    中間不能有空格,可以使用下劃線(_)。
    不能使用標點符號。
    不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)。

  • 使用變數
    使用一個定義過的變數,只要在變數名前面加美元符號即可,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

變數名外面的花括號是可選的,加不加都行,加花括號是為了幫助直譯器識別變數的邊界,比如下面這種情況:

for skill in Ada Coffe Action Java
do
    echo "I am good at ${skill}Script"
done
  • 只讀變數
    使用 readonly 命令可以將變數定義為只讀變數,只讀變數的值不能被改變。
#!/bin/bash
myUrl="http://www.google.com"
readonly myUrl
myUrl="http://www.runoob.com"
  • 刪除變數
    使用 unset 命令可以刪除變數。變數被刪除後不能再次使用。unset 命令不能刪除只讀變數。語法:
unset variable_name
  • Shell 字串
    字串是shell程式設計中最常用最有用的資料型別(除了數字和字串,也沒啥其它型別好用了),字串可以用單引號,也可以用雙引號,也可以不用引號。單雙引號的區別跟PHP類似。單引號內變數講無法被引用。
    雙引號的優點:雙引號裡可以有變數,雙引號裡可以出現轉義字元。
your_name='runoob'
str="Hello, I know you are \"$your_name\"! \n"
echo $str
  • 拼接字串
your_name="runoob"
# 使用雙引號拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1
# 使用單引號拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

輸出結果為:

hello, runoob ! hello, runoob !
hello, runoob ! hello, ${your_name} !
  • 提取字串長度
str="my_name"
echo ${#str}
  • 找出對應位置的擷取字元
str="www.runoob.com"
echo ${str:1:4}
  • 陣列
  • Shell 陣列用括號來表示,元素用"空格"符號分割開,語法格式如下:
array_name=(value1 ... valuen)

讀取陣列
讀取陣列元素值的一般格式是:

${array_name[index]}

陣列for迴圈操作

array=(1,2,3,4)
for i in $array
do
	echo "${i}"
done
  • 引數呼叫

$# 傳遞到指令碼的引數個數
" * 以一個單字串顯示所有向指令碼傳遞的引數。 如" *“用「”」括起來的情況、以"$1 $2 … $n"的形式輸出所有引數。
$$ 指令碼執行的當前程序ID號
$! 後臺執行的最後一個程序的ID號
@ @ 與 *相同,但是使用時加引號,並在引號中返回每個引數。
如"[email protected]“用「”」括起來的情況、以"$1" “ 2 " " 2" … " n” 的形式輸出所有引數。
$- 顯示Shell使用的當前選項,與set命令功能相同。
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。

呼叫引數前,先定義才能呼叫,函式同理,示例:

fun_run(){
echo "run succeed!"
}
val=$*
for i in $val
do
	fun_${i}
done
  • 陣列for…in迴圈格式:
    for var in string
    do
    … $var
    done
for i in 1 2 3 4
do 
	echo $i
done