Shell 编程 Shell Script
Shell Script簡介
什么是shell script?
shell:與內核通信的工具;
script:腳本;
shell script:針對shell所寫的腳本。
利用shell功能所寫的一個程序。
純文本文檔。
包含shell的語法和命令(含外部命令);
搭配正則表達式、管道命令與數據流重定向
學習shell script的好處?(主要用于服務器相關、系統管理相關)
自動化管理
追蹤和管理重要任務
簡單入侵偵測功能
連續命令腳本化
簡易的數據處理
跨平臺支持,易學易用
編寫第一個shell程序
純文本
分析運行:從上到下、從左到右
命令與選項間的多個空白會被忽略
空白行也會被忽略,tab視作空格
如果讀取到回車,則嘗試運行
一行內容過多,可以用“\"來延伸至下一行
#為注釋,其后的數據會被忽略
/home/teacher/demo.sh
直接命令運行
demo.sh文件比如具有可讀和可運行(rx)權限。
絕對路徑:/home/teacher/demo.sh
相對路徑:工作目錄在/home/teacher時,./demo.sh
以bash程序來運行:
bash demo.sh或sh demo.sh 來運行
echo -e "Hello World!\n"ll -d first.sh
#!/bin/bash:解釋器
#:注釋
程序主要部分
運行結果告知: exit n
編寫shell程序的良好習慣
Script的說明
注釋
縮進
Shell Script練習
1.對話式腳本
變量內容由使用者確定;
read
#!/bin/bash read -p "please write first name:" fn read -p "please write last name:" ln echo "your full name is $fn$ln" exit 02.創建隨日期變化的文件腳本 (?)
3.數值運算
#!/bin/bash read -p "please input a:"a read -p "please input b:"b var=$(($a+$b)) echo $var exit 0Shell的判斷式
$?
&&
||
判斷目錄是否存在:ls 數據重定向 $?
利用命令:test
利用符號:[ ]
test -e /home && echo "exist" || echo "not exist"
test需要通過$?、&&、||顯示結果。
test案例
1.這個文件是否存在,如果不存在則返回一個file does not exist的信息并中斷程序。
2.如果這個文件存在,則判斷它是文件還是目錄,并相應輸出filename is a regular file或filename is a directory。
3.判斷一下,運行者的身份對這個文件或者目錄所擁有的權限,并進行輸出。
[]
[ -z "$HOME" ] ; echo $?
[ "$HOME" == "$MAIL" ]
在中括號[]內的每個組件都需要由空格符分割;
在中括號內的變量,最好都以雙引號括起來;
在中括號內的常量,最好都以單括號或雙括號括起來。
[ "$name" == "my" ]; echo $?
#!/bin/bash #Program: # This program shows the user's choice. read -p "Please input(Y/N):" yn[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK,continue." && exit 0 [ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh,interrupt." && exit 0 echo "I don't know what your choice is " && exit 0Shell Script的輸入變量
/path/to/script opt1 opt2 opt3 opt4
$0? ? ? ? ? ? ? ? ? ?$1? ? $2? ? $3? ? $4
$#:參數的個數
$@:"$1" "$2" "$3" "$4"
$*:"$1 $2 $3 $4"
案例
程序的文件名是是嗎?
共有多少個參數?
如果參數個數小于2則告知使用者參數數量太少?
全部參數的內容是什么?
第一個參數是什么?
第二個參數是什么?
#!/bin/bash #Program: # This program shows the script name,parameters... echo "Script name: $0" echo "Total parameter number: $#" [ "$#" -lt 2 ] && echo "The number of parameter is less than 2. Stop here." && exit 0 cat <<EOF Your whole parameters are $0 The 1st parameter is $1 The 2nd parameter is $2 EOF條件判斷
單層、簡單的條件判斷
if [ 條件判斷式 ];then
? ? ? ? 當條件判斷成立時,可以運行的內容;
fi
&&:AND;
||:OR;
[ "$yn" == "Y" -o "$yn" == "y" ];
[ "$yn" == "Y" ] || [ "$yn" == "y"];
多重、復雜的條件判斷
if [ 條件判斷式 ];then
? ? ? ? 當條件判斷成立時,可以運行的內容;
else
? ? ? ? 當條件判斷不成立時,可以運行的內容;
fi
if [條件判斷式 -1];then
? ? ? ? 當條件判斷1成立時,可以運行的內容;
elif [ 條件判斷式 -2 ]; then
? ? ? ? 當條件判斷2成立時,可以運行的內容;
else?
? ? ? ? 當條件判斷1與2均不成立時,可以運行的內容;
fi
case...esac
case $變量名 in
? ? ? ? "第一個變量內容”)
? ? ? ? 程序段
? ? ? ? ;;
? ? ? ? "第二個變量內容”)
? ? ? ? 程序段
? ? ? ? ;;
*)
? ? ? ? 不包含第一個變量與第二個變量內容的其他程序段
? ? ? ? ;;
esac
函數
function fname()
{
? ? ? ? 程序段
}
#!/bin/bash #Program: # case and function function printit() {echo -n "Your choice is" } echo "This program will print your choice!" case $1 in"one")echo "Your choice is ONE";;"two")printit; echo $1 | tr 'a-z' 'A-Z';;"three")printit; echo $1 | tr 'a-z' 'A-Z';;*)echo "Usage $0 {one|two|three)";; esac循環
while do done
until do done
for do done
不定循環
while do done
while [ 條件 ](條件成立時持續循環)
do
? ? ? ? 程序段
done
until do done
util [ 條件 ](條件不成立時持續循環)
do?
? ? ? ? 程序段
done
固定循環
for do done
for var in con1 con2 con3 ...
do
? ? ? ? 程序段
done
#!/bin/bash #Program: # for in for animal in dog cat elephant do echo "There are ${animal}s..." done #!/bin/bash #Program: # for in sepnetwork="192.168.31"for i in $(seq 1 100) do ping -c 1 $(network).$(1) >/dev/null 2>&1 && res=0 || res=1if [ [ $res == 0 ] ];thenecho "Server ${network}.${i} is UP."elseecho "Server ${network}.${i} is DOWN."fi donefor do done的數值處理
for ((初始值;限制值;運行步階))
do?
? ? ? ? 程序段
done
總結
以上是生活随笔為你收集整理的Shell 编程 Shell Script的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quartus2的实验常用元件
- 下一篇: 7.BLE---跳频原理