創(chuàng)建腳本
可以使用 vi/vim 命令來創(chuàng)建文件),新建一個文件 test.sh,擴展名為 sh(sh代表shell)
文件內容如下:
#! /bin/sh
echo "testDemo"
! 是一個約定的標記,它告訴系統(tǒng)這個腳本需要什么解釋器來執(zhí)行,即使用哪一種 Shell。
echo 命令用于向窗口輸出文本。
執(zhí)行腳本
1.先cd 到腳本所在文件夾
- $: chmod +x ./test.sh #使腳本具有執(zhí)行權限
- $: ./test.sh #執(zhí)行腳本
注意:$代表后面是命令行
注釋#
sh里沒有多行注釋,只能每一行加一個#號
變量
1.定義
變量名前不加$,
變量名和等號之間不能有空格,
已定義的變量,可以被重新定義
格式是:以字母開頭,無空格,無標點符號,可有(_),
2.使用
使用一個定義過的變量,只要在變量名前面加美元符號即可
your_name="dyn" #定義變量
echo $your_name #使用變量
echo ${your_name} #{}是可選的
變量修飾符
只讀變量 readonly,
刪除變量unset,注意unset 命令不能刪除只讀變量。
myUrl="http://www.w3cschool.cc"
readonly myUrl
字符串
可以用單引號,也可以用雙引號,也可以不用引號
echo ${greetting}
字符串拼接
greetting="ee"$your_name"***"
獲取字符串長度
echo ${#greetting}
字符串截取
echo ${greetting:1:3}
數組
bash支持一維數組(不支持多維數組),并且沒有限定數組的大小,下標由0開始,
用括號來表示數組,數組元素用"空格"符號分割開
數組的定義和常見操縱
定義數組
array_name=("dyn" "shz" "sulei")
定義數組的各個分量
array_name[1]="dd"
按下標獲取數組元素
echo ${array_name[1]}
獲取數組中所有元素
echo ${array_name[@]}
獲取單個數組元素的長度
echo ${#array_name[1]}
獲取整個數組的長度,即元素個數
echo ${#array_name[@]}
echo ${#array_name[*]}
$* 與 $@ 區(qū)別:
相同點:都是引用所有參數。
不同點:只有在雙引號中體現(xiàn)出來。
假設在腳本運行時寫了三個參數 1、2、3,,則 " * " 等價于 "1 2 3"(傳遞了一個參數),
而 "@" 等價于 "1" "2" "3"(傳遞了三個參數)。
運算符
原生bash不支持簡單的數學運算,但expr等工具可實現(xiàn),expe是 最常用的表達式計算工具
val=`expr 2 + 2`
echo "兩數之和為 : $val"
val=`expr $a \* $b`
echo "a * b : $val"
條件表達式要放在方括號之間,并且要有空格
獲取輸入的參數getopts
語法:getopts option_string variable
比如:getopts "t:" optname
意思是獲取參數t的值放入變量optname中
形式一。參數是必須寫的
while getopts "a:" opt; do
case $opt in
a)
echo "this is -a the value is $OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG"
;;
esac
$: ./test.sh -a dd
this is -a the value is dd
$:./test.sh
沒有任何輸出,因為沒有參數,也沒有值
$: ./test.sh -a
./test.sh: option requires an argument -- a
Invalid option: -
這里報錯了,因為 a這個參數是必須有值的
參數是可選的,即可選的參數其后加冒號:
while getopts ":a:" opt; do
case $opt in
a)
echo "this is -a the value is $OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG"
;;
esac
done
$: ./test.sh -a ''
this is -a the value is
$: ./test.sh -a
無任何輸出,因為參數a是可選的,有值輸出,無值就不輸出
多個輸入參數
getopts ":h:ms"
選項之間可以通過冒號:進行分隔,也可以直接相連接,
getopts發(fā)現(xiàn)冒號后,會處理用戶輸入的參數值,這個參數值被保存在OPTARG中。
參數后的:表示選項后面必須帶有參數,如果沒有可以不加實際值進行傳遞
getopts使用OPTIND作為索引,來處理下一個需要處理的參數
字符串最前面的冒號“:”用于指定getopts工作于silent mode,在silent模式下,當用戶輸入的參數不滿足OPTSTRING時,不會講illegal option這樣的錯誤信息打印出來,。如果想要工作在verbose模式下,可以去掉最前面的冒號
執(zhí)行時暫時只會獲取有冒號的參數值。其他的暫時不會