一、常用shell腳本指令
echo: 輸出指定的文本或變量值到標(biāo)準(zhǔn)輸出。
echo "hello"
read: 從標(biāo)準(zhǔn)輸入讀取用戶輸入,并將其保存到指定的變量中。
read var
if: 執(zhí)行條件語句,如果滿足指定條件則執(zhí)行特定操作,否則執(zhí)行其他操作。
if [ $num -gt 10 ]
then
echo "num is greater than 10"
else
echo "num is less than or equal to 10"
fi
for: 循環(huán)執(zhí)行特定操作,每次迭代更新變量值。
for i in {1..10}
do
echo $i
done
while: 循環(huán)執(zhí)行特定操作,直到指定條件不再滿足為止。
while [ $num -lt 10 ]
do
echo $num
num=$((num+1))
done
case: 執(zhí)行多路分支語句,根據(jù)指定條件執(zhí)行不同的操作。
case $var in
"1")
echo "var is 1"
;;
"2")
echo "var is 2"
;;
*)
echo "var is not 1 or 2"
;;
esac
grep: 在指定文件或輸入流中查找匹配指定模式的行。
grep "pattern" file.txt
sed: 編輯指定文件或輸入流的文本內(nèi)容,可以進(jìn)行替換、刪除、插入等操作。
sed 's/pattern/replacement/g' file.txt
awk: 處理文本數(shù)據(jù),可以進(jìn)行分割、篩選、計(jì)算等操作。
awk '{print $1, $2}' file.txt
二、給出 shell 腳本編寫的一般過程
(1)確定腳本的目的和功能:在編寫 shell 腳本之前,需要明確腳本的目的和功能。這有助于確定需要執(zhí)行哪些命令和腳本的整體結(jié)構(gòu)。
(2)寫出腳本的基本框架:在寫 shell 腳本時,需要先寫出腳本的基本框架,包括指定腳本使用的解釋器、設(shè)置環(huán)境變量等。
(3)編寫腳本的命令:根據(jù)腳本的目的和功能,編寫腳本需要執(zhí)行的命令??梢允褂靡恍┏S玫拿睿?cd、ls、echo 等。
(4)添加參數(shù)和選項(xiàng):可以在腳本中添加參數(shù)和選項(xiàng),使腳本更加靈活和易用。參數(shù)和選項(xiàng)可以通過 $1、$2、$3 等變量進(jìn)行引用。
(5)調(diào)試腳本:編寫完腳本后,需要進(jìn)行調(diào)試??梢允褂靡恍┱{(diào)試工具,如 bashdb、kshdb、shdb 等。
(6)測試腳本:在腳本編寫完成后,需要進(jìn)行測試以確保腳本的正確性和可靠性??梢允褂靡恍y試工具,如 shunit2、bats 等。
(7)完善腳本:在完成基本功能后,可以對腳本進(jìn)行完善,添加一些特性和改進(jìn)腳本性能
(8)文檔化腳本:最后,需要文檔化腳本,包括腳本的使用方法、參數(shù)和選項(xiàng)等,以方便其他人使用和維護(hù)腳本。
三、編寫 shell 腳本 p1.sh ,完成向用戶輸出“Hello!”的問候語。 并根據(jù)實(shí)驗(yàn)的時?間, 分別給出:“上午好!”或者“下午好!”或者“晚上好!”的問候。(提示:使用date 取得當(dāng)前的時間,并對 date?進(jìn)行格式化取得當(dāng)前時間中的小時,?根據(jù)當(dāng)前的小時來判斷上午、 下午還是晚上。 1-11 點(diǎn)上午, 12-18 點(diǎn)下午, 19-24?點(diǎn)晚上。)
給出程序代碼、解釋及運(yùn)行結(jié)果展示。
??
#!/bin/bash:指定腳本的解釋器為 bash。
hour=$(date +"%H"):使用 date 命令獲取當(dāng)前的小時數(shù),并將其賦值給變量 hour。
if [ $hour -ge 1 -a $hour -lt 12 ]; then:如果當(dāng)前時間在 1 點(diǎn)到 11 點(diǎn)之間,則輸出上午好的問候語。
elif [ $hour -ge 12 -a $hour -lt 19 ]; then:如果當(dāng)前時間在 12 點(diǎn)到 18 點(diǎn)之間,則輸出下午好的問候語。
else:如果當(dāng)前時間在 19 點(diǎn)到 24 點(diǎn)之間,則輸出晚上好的問候語。
fi:if 結(jié)構(gòu)的結(jié)束標(biāo)志。
????????在上述腳本中,使用 date 命令獲取當(dāng)前的小時數(shù),然后根據(jù)小時數(shù)判斷是上午、下午還是晚上,并輸出相應(yīng)的問候語。通過這種方式,可以根據(jù)當(dāng)前的時間來動態(tài)地生成問候語,讓腳本更加靈活和實(shí)用。
四、編程完成 shell 腳本 p2.sh :如果存在 p1.sh 文件, 則輸出信息: p1.sh 文件已?經(jīng)存在, 并詢問是否允許? 如果用戶回答: 要運(yùn)行, 那么給出運(yùn)行結(jié)果;如回到?不要運(yùn)行, 則退出程序。如果 p1.sh 不存在, 則提示用戶先創(chuàng)建文件并退出。
給出程序代碼、解釋及運(yùn)行結(jié)果展示。
#!/bin/bash:指定腳本的解釋器為 bash。
if [ -e p1.sh ]; then:判斷當(dāng)前目錄下是否存在 p1.sh 文件,如果存在,則執(zhí)行下一步操作;否則輸出錯誤信息并退出程序。
echo "p1.sh 文件已經(jīng)存在,是否允許運(yùn)行?(y/n)":輸出提示信息,詢問用戶是否允許運(yùn)行 p1.sh 文件。
read answer:使用 read 命令獲取用戶的輸入,并將其賦值給變量 answer。
if [ "$answer" = "y" ]; then:判斷用戶輸入的內(nèi)容是否為 y,如果是,則執(zhí)行下一步操作;否則輸出錯誤信息并退出程序。
echo "運(yùn)行 p1.sh 腳本:"``./p1.sh``":輸出提示信息,執(zhí)行 p1.sh 腳本。
else:if 結(jié)構(gòu)的分支結(jié)束標(biāo)志。
echo "用戶選擇不允許運(yùn)行 p1.sh 腳本,程序退出。":輸出提示信息,表示用戶選擇不允許運(yùn)行 p1.sh 腳本,并退出程序。
exit 0:退出程序并返回狀態(tài)碼 0。
else:if 結(jié)構(gòu)的分支結(jié)束標(biāo)志。
echo "p1.sh 文件不存在,請先創(chuàng)建文件。":輸出錯誤信息,表示 p1.sh 文件不存在,請先創(chuàng)建文件。
exit 0:退出程序并返回狀態(tài)碼 0。
????????在上述腳本中,使用 -e 選項(xiàng)判斷當(dāng)前目錄下是否存在 p1.sh 文件,如果存在則提示用戶是否允許運(yùn)行,如果不存在則提示用戶先創(chuàng)建文件。如果用戶允許運(yùn)行 p1.sh 腳本,則執(zhí)行 p1.sh 文件;如果用戶不允許運(yùn)行,則輸出錯誤信息并退出程序。
五、編寫?shell 腳本, 按要求打印輸出乘法口訣表,輸出用兩種方式完成: 一種是?直接在控制臺輸出; 另一種是輸出至文件 result.txt。
1x1=1 |
||||||||
1x2=2 |
2x2=4 |
|||||||
1x3=3 |
2x3=6 |
3x3=9 |
||||||
1x4=4 |
2x4=8 |
3x4=12 |
4x4=16 |
|||||
1x5=5 |
2x5=10 |
3x5=15 |
4x5=20 |
5x5=25 |
||||
1x6=6 |
2x6=12 |
3x6=18 |
4x6=24 |
5x6=30 |
6x6=36 |
|||
1x7=7 |
2x7=14 |
3x7=21 |
4x7=28 |
5x7=35 |
6x7=42 |
7x7=49 |
||
1x8=8 |
2x8=16 |
3x8=24 |
4x8=32 |
5x8=40 |
6x8=48 |
7x8=56 |
8x8=64 |
|
1x9=9 |
2x9=18 |
3x9=27 |
4x9=36 |
5x9=45 |
6x9=54 |
7x9=63 |
8x9=72 |
9x9=81 |
給出程序代碼、解釋及運(yùn)行結(jié)果展示。
?
#!/bin/bash:指定腳本的解釋器為 bash。
echo "控制臺輸出:"``for i in {1..9}; do``...``done:使用 echo 命令輸出提示信息,并使用兩層嵌套的循環(huán)打印乘法口訣表,其中外層循環(huán)控制行數(shù),內(nèi)層循環(huán)控制列數(shù)。
for j in $(seq 1 $i); do``echo -n "$j*$i=$((i*j)) "``done:使用 seq 命令生成從 1 到當(dāng)前行數(shù)的數(shù)列,內(nèi)層循環(huán)遍歷數(shù)列并輸出對應(yīng)的乘法表達(dá)式。
echo "":在每一行輸出結(jié)束時,使用 echo 命令打印一個空行。
echo "文件輸出:"``> result.txt``for i in {1..9}; do``...``done:使用 echo 命令輸出提示信息,并將輸出結(jié)果寫入到文件 result.txt 中。
echo -n "$j*$i=$((i*j)) "``>> result.txt:使用 echo 命令輸出乘法表達(dá)式,并使用 >> 運(yùn)算符將其追加寫入到文件 result.txt 中。
echo ""``>> result.txt:在每一行輸出結(jié)束時,使用 echo 命令打印一個空行,并將其追加寫入到文件 result.txt 中。
????????注意,上述代碼中的 -n 選項(xiàng)表示不換行輸出。在控制臺輸出時需要使用該選項(xiàng),以避免輸出結(jié)果混亂。在文件輸出時則不需要使用該選項(xiàng),因?yàn)槲募忻恳恍卸家該Q行符結(jié)尾。
六、總結(jié)
語法錯誤: shell 腳本中常見的語法錯誤包括拼寫錯誤、缺少分號、括號不匹配等。解決方式是使用代碼編輯器或 IDE 來檢查語法錯誤,并使用 shellcheck 等工具進(jìn)行代碼檢查。
文件權(quán)限問題: 如果在運(yùn)行 shell 腳本時遇到“Permission denied”錯誤,可能是因?yàn)樵撃_本沒有執(zhí)行權(quán)限。解決方式是使用 chmod 命令給腳本添加執(zhí)行權(quán)限,例如 chmod +x script.sh。
環(huán)境變量問題: shell 腳本中使用的命令和程序需要在環(huán)境變量中定義,否則會提示“command not found”等錯誤。解決方式是在腳本中使用絕對路徑或添加環(huán)境變量到 PATH 變量中。
調(diào)試問題: shell 腳本的調(diào)試可以使用 echo 命令輸出調(diào)試信息,或者使用 set -x 命令啟用跟蹤模式,以便查看腳本執(zhí)行的詳細(xì)過程。還可以使用 shellcheck 等工具進(jìn)行代碼檢查和調(diào)試。
個人感想:
????????Shell 腳本是一種非常實(shí)用的工具,可以用來自動化和簡化很多日常工作和系統(tǒng)管理任務(wù)。學(xué)習(xí) Shell 腳本不僅可以提高工作效率,還可以深入了解 Linux 和 Unix 操作系統(tǒng)的基本原理和工作方式。在編寫 Shell 腳本時,需要注意語法規(guī)范和代碼風(fēng)格,以便保證腳本的可讀性和可維護(hù)性。此外,使用合適的工具和技巧進(jìn)行代碼調(diào)試和測試也非常重要。文章來源:http://www.zghlxwxcb.cn/news/detail-586631.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-586631.html
到了這里,關(guān)于Linux shell腳本編寫的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!