【Shell】Shell語法總結以及簡易記憶體條的實現
阿新 • • 發佈:2018-12-26
基本語法
Shell檔案的開頭
Shell的開頭需要寫成
#!/bin/bash
#!這個符號是表示,讓系統去呼叫後面的的引數來解釋執行該文字的程式
除此之外,還有下列可以用的直譯器
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
Shell進行註釋
# 符號代表的是改行後面的內容註釋
變數
如何定義變數
shell中進行變數的定義時,不需要對變數進行宣告,可以直接賦值
應用變數時,用“ $” + 變數名即可訪問變數的內容
注意:
賦值時,等號左右兩邊不可有空格。因為shell指令碼的內容是由直譯器進行解釋執行的
如果等號進行了空格,便將對變數的賦值視為指令,造成錯誤
特殊變數
$0
相當於C語⾔言main函式的argv[0]$1、$2...
這些稱為位置引數(Positional Parameter),相當於C語⾔言main函式 的argv[1]、argv[2]...$#
相當於C語⾔言main函式的argc - 1,注意這⾥裡的#後⾯面不表⽰示註釋表⽰示引數列表"$1" "$2" ...,例如可以⽤用在for迴圈中的in後⾯面。
$?
上⼀一條命令的Exit Status$$
當前Shell的程序號
定義陣列
在Shell中,⽤用括號來表⽰示陣列,陣列元素⽤用“空格”符號分割開。 定義陣列的⼀一般形式為: array_name=(value1 ... valuen)arr=( "hello" "world" "!!!" )
Arr[0]="hello"
Arr[1]="world"
Arr[2]="!!!"
echo ${arr[*]}
echo ${Arr[*]}
流程控制語句
if語句
if [ 10 -gt 20 ] #如果10大於20
echo "10 > 20" #列印這句話
else
echo "10 < 20"
fi
和C語言不同,if語句的判斷需要加方括號並且if和 ‘[’ 以及後面的內容都要保持空格分開,原因同上
結尾註意以 fi 結束
&&和||快捷操作符
echo "Usage $0 data1 ... dataN"
exit 1
}
&&符號表示的是,如果&&左邊的條件滿足,便執行&&右邊的指令
而不同的是,||表示如果左邊的條件沒有滿足,才執行右邊的指令
()運算子
為了在當前shell中執行一組命令,可以用命令分隔符(即",")隔開每一個命令,並把所有的命令用圓括號()括起來。
case語句
類似於C語言中的Switch,case語句
read n
case $n in
1 )
echo "The num is 1"
;;
2 )
echo "The num is 2"
;;
*)
echo "The num is not 1 or 2"
esac
while語句
從1列印到10
i=1
while [ $i -le 10 ]
do
echo $i
let i++
done
for語句
for迴圈和C語言有很大差別
從1列印到10
i=1
for i in {1..10}
do
echo $i
done
函式的定義
function myfun()
{
return 0
}
如此,便定義了一個簡單的函式
需要注意的是,函式體不可以為空
函式可以被認為是一個程式或者小指令碼
當該函式被呼叫時,則會產生新的子程序來執行該函式內部的指令
可以用return 來返回子程序結束的退出碼
也可以用echo來返回該函式返回的字串
指令碼的除錯
選項
Shell提供了⼀一些⽤用於除錯指令碼的選項,如下所⽰示:
-n
讀⼀一遍指令碼中的命令但不執⾏行,⽤用於檢查指令碼中的語法錯誤
-v
-x
提供跟蹤執⾏行資訊,將執⾏行的每⼀一條命令和結果依次打印出來
三種除錯方法
命令列提供引數
$ sh -x ./script.sh
指令碼開頭提供引數
#! /bin/sh -x
利用set命令來啟用或者禁用引數
set -x和set +x分別表⽰示l和禁⽤用-x引數,這樣可以只對指令碼中的某⼀一段進⾏行跟蹤除錯。
簡單進度條的實現
#!/bin/bash
i=0
index=0
arr=( '|' '\\' '-' '/')
str=''
while [ $i -le 100 ]
do
index=i%4
printf "[%-100s][%d%%][%c]\r" "$str" "$i" "${arr[$index]}"
str+='#'
let i++
sleep 0.1
done