輕松讀懂 Bash Shell 腳本
開始
#!/bin/bash # 腳本的第一行叫 shebang,用來告知系統如何執行該腳本
echo Hello, world!
chmod a+x script.sh && sh script.sh # && 上一個指令執行成功執行下一個指令
注意事項
echo 'the first line'; echo 'the second line' # 每一句指令以換行或分號隔開
echo "There are $(ls | wc -l) items here." # 一個指令可用 $( ) 嵌套在另一個指令內部
變量
# 聲明變量
VARIABLE="Some string" # 每個變量的值都是字符串形式。
VARIABLE = "Some string" # 注意空格 Bash 會把 VARIABLE 當做一個指令,由于找不到該指令,因此這里會報錯。
使用變量
echo $VARIABLE # 如果要使用變量的值, 則要加 $。
echo "$VARIABLE"
echo '$VARIABLE' # 注意: ' (單引號) 不會展開變量(即會屏蔽掉變量)。
內置變量
echo "上個進程退出狀態,成功退出,狀態為0,否則,非0: $?"
echo "腳本的 PID: $$"
echo "參數數目: $#"
echo "腳本所有參數: $@"
echo "不同位置參數: $1 $2..."</code></pre>
環境變量env
- PATH 查找可執行文件路徑 在/etc/environment 或 /ect/profile 或 ~/.bashrc
- HOME home 目錄
- PWD 當前目錄
- USER 當前用戶
- UID root的UID=0
- SHELL 當前shell版本
- export PATH=$PATH:/new/path/ 設置環境變量 export 當前shell程序都會繼承這個變量
邏輯控制
#!/bin/bash
echo "What's your name?"
read NAME # 這里不需要聲明新變量
echo Hello, $NAME!
if [ $NAME -ne $USER ]
then
echo "Your name is you username"
else
echo "Your name isn't you username"
fi
case "$VARIABLE" in
# 列出需要匹配的字符串
0) echo "There is a zero.";;
1) echo "There is a one.";;
*) echo "It is not null.";;
esac
注意
和 $( ) 等價。seq 返回長度為 3 的數組。
for VARIABLE in seq 3
do
echo "$VARIABLE"
done
在 if 語句中使用 && 和 || 需要多對方括號
if [ $Name == "Steve" ] && [ $Age -eq 15 ]
then
echo "This will run if $Name is Steve AND $Age is 15."
fi
while 循環
while [ true ]
do
echo "loop body here..."
break
done</code></pre>
表達式
echo $(( 10 + 5 ))
函數
function foo ()
{
echo "Arguments work just like script arguments: $@"
echo "And: $1 $2..."
echo "This is a function"
return 0
}
bar ()
{
echo "Another way to declare functions!"
return 0
}
foo "My name is" $NAME # 調用函數
試著讀一讀
#!/bin/bash
dir=${PWD}
bfinder=`echo $PATH|grep $dir`
echo $bfinder
if [ "$bfinder" == "" ]
then
echo "export PATH=/$PATH:${dir}" >> ~/.bash_profile
export PATH=$PATH:${dir}
fi
將當前文件地址作為默認路徑寫入環境變量
來自:http://www.jianshu.com/p/6fd715595090