Bash筆記
函數
function hello {
echo "hello, $*"
}
分支判斷
case "$1" in
1) echo "a";;
2) echo "b";;
*) echo "c";;
esac
echo -n "Do you agree with this? [yes or no]: "
read yno
case $yno in
[yY] | [yY][Ee][Ss] )
echo "agreed"
;;
[nN] | [n|N][O|o] )
ehco "not agreed"
;;
esac
循環
for i in $(ls); do
echo $i
done
for i in `seq 1 10`; do
echo $i
done
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo $COUNTER
let COUNTER=COUNTER+1
done
COUNTER=20
util [ $COUNTER -lt 10 ]; do
echo $COUNTER
let COUNTER-=1
done
條件判斷
if [ "foo" == "$1" ]; then
echo "a"
else
echo "b"
fi
經常使用條件
[ -a FILE ] # 是否文件存在
[ -b FILE ] # 是否block文件
[ -c FILE ] # 是否字符文件
[ -d FILE ] # 是否目錄存在
[ -e FILE ] # 是否文件存在
[ -f FILE ] # 是否普通文件
[ -h FILE ] # 是否符號連接
[ -p FILE ] # 是否管道
[ -r FILE ] # 是否可讀
[ -s FILE ] # 是否非空文件
[ -w FILE ] # 是否可寫
[ -x FILE ] # 是否可執行
[ FILE1 -nt FILE2 ] # 是否FILE1比FILE2新
[ FILE1 -nt FILE2 ] # 是否FILE1比FILE2舊
[ -z STRING ] # 是否空字符串
[ -n STIRNG ] # 是否非空字符串
[ STRING ] # 是否非空字符串
[ STRING1 == STRING2 ] # 是否STRING1等於STRING2
[ STRING1 != STRING2 ] # 是否STRING1不等於STRING2
[ STRING1 < STRING2 ] # 是否STRING1小於STRING2
[ STRING1 > STRING2 ] # 是否STRING1大於STRING2
[ ARG1 OP ARG2 ] # 關係判斷。OP是-eq, -ne, -lt, -le, -gt, -ge之一。
# 複合條件
[ !EXPR ]
[ (EXPR) ]
[ EXPR1 -a EXPR2 ] # and
[ EXPR1 -o EXPR2 ] # or
本地變量
function foo {
local x=1
echo $x
}
用戶接口
OPTIONS="Hello Quit"
select opt in $OPTIONS; do
if [ "$opt" = "Quit" ]; then
echo done
exit
elif [ "$opt" = "Hello" ]; then
echo Hello World
else
clear
echo bad option
fi
done
read name email
echo $name $email
參考資料