Shell函數操作
echo
#! /bin/bash
echo "Hello World !"
如何運行shell文件
終端輸入?
`sh 腳本的文件名.sh`
變量
?定義變量
注意:等號兩邊不能有空格,否則會識別成指令
variable="some value"
讓變量只讀
readonly variable
刪除變量
unset variable_name
使用變量(前面需要加美元符號)
echo $variable
echo $(variable)
腳本參數
傳遞參數:?
在終端輸入?
`sh 腳本的文件名.sh 參數1 參數2 參數3`
獲取第0個參數
param1=$0
獲取參數個數
args_count=$#
獲取所有參數 "參數1 參數2 參數3"表示
args=$*
獲取所有參數 "參數1" "參數2" "參數3"表示
args2=$@
顯示當前進程ID
pid=$$
后臺運行的最后一個ID號
last_pid=$!
顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤
exit_state=$?
if
注意必須以`fi`結尾
if
if condition
then
? ? command
fi
if - else
if condition
then
? ? command
else
? ? command
fi
if - elif - else
if condition1
then
? ? command1
elif condition2
then
? ? command2
else
? ? commandN
fi
?for
for var in item1 item2 ... itemN
do
? ? command
done
寫成一行
for var in item1 item2 ... itemN; do command;done;
while
while condition
do
? ? command
done
until
與`while`相反?
until condition
do
? ? command
done
case
必須以`esac`結尾每個分支有兩個分號,`*)`表示不匹配的分支
case $aNum in
? ? 1)? echo '你選擇了 1'
? ? ;;
? ? 2)? echo '你選擇了 2'
? ? ;;
? ? 3)? echo '你選擇了 3'
? ? ;;
? ? 4)? echo '你選擇了 4'
? ? ;;
? ? *)? echo '你沒有輸入 1 到 4 之間的數字'
? ? ;;
esac
shell支持break和continue
函數
funWithReturn(){
? ? read aNum
? ? read anotherNum
? ? return $(($aNum+$anotherNum))
}
函數獲取參數的方法與腳本獲取參數方法一致
引入其他腳本
使用`.`符號引入其他sh腳本
. ./test1.sh
或者使用source
source ./test1.sh
字符串
字符串插值
echo "${variable}"
字符串長度
length=${#variable}
子串
echo ${string:1:4}
字符串拼接
variable ="hello, "$your_name" !"
echo $greeting $variable
字符串可以使用單引號
單引號的字符串無法插值,并且無法用轉義字符
數組
定義數組
array_name=(value0 value1 value2 value3)
數組賦值
array_name[0]=value0
數組長度
length=${#array_name[0]}
獲取數組所有元素
echo "${my_array[*]}"
echo "${my_array[@]}"
關系運算符
算數運算符
- `+`,`-`,`*`,`/`,`%`,`=`,`==`,`!=`
關系運算符
`-eq` 相等?
`-ne` 不等?
`-gt` 大于?
`-lt` 小于?
`-ge` 大于等于?
`-le` 小于等于?
布爾運算符
?`!` 非
`-o` 或
?`-a` 與
邏輯運算符
`&&` 邏輯與
`||` 邏輯或
字符串運算符
?`=` 相等?
?`!=` 不等?
?`-z $str` 長度為0?
`-n $str` 長度不為0?
`$str` 為空?
文件測試運算符
`-d $file` 目錄?
`-f $file` 普通文件?
`-r $file` 可讀?
?`-w $file` 可寫?
`-x $file` 可執(zhí)行?
?`-s $file` 0字節(jié)?
`-e $file` 是否存在
Shell重定向
?`command > file` 將輸出重定向到file
`command < file` 將輸入重定向到file
?`command >> file` 將輸出追加到file
`n > file` 將文件描述符為 n 的文件重定向到 file
`n >> file` 將文件描述符為 n 的文件以追加的方式重定向到 file
`n >& file` 將輸出文件 m 和 n 合并
`n <& file` 將輸入文件 m 和 n 合并
`<< tag` 將開始標記 tag 和結束標記 tag 之間的內容作為輸入
更多命令參考?