shell基礎(chǔ)教程

??Shell 是一個(gè)用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設(shè)計(jì)語言。學(xué)習(xí)shell命令主要是為了如下:
??1)需要看懂運(yùn)維人員編寫的Shell程序。
??2)偶爾會(huì)編寫一些簡單Shell程序來管理集群、提高開發(fā)效率。

1. Shell變量

??變量的命名規(guī)則如下:
??1)命名只能使用英文字母,數(shù)字和下劃線,首個(gè)字符不能以數(shù)字開頭。
??2)中間不能有空格,可以使用下劃線(_)。
??3)不能使用標(biāo)點(diǎn)符號(hào)。
??4)不能使用bash里的關(guān)鍵字(可用help命令查看保留關(guān)鍵字)。

_var="hello world"

??通過$+變量名訪問該變量

echo $_var

??可以通過readonly命令設(shè)置變量只讀

readonly  _var

??可以通過unset刪除該變量,之后將無法訪問該變量。

unset -var

??單引號(hào)中的任何字符串都會(huì)進(jìn)行原樣輸出,但是雙引號(hào)中將會(huì)把變量替換為真實(shí)的值。

name=hello
echo '$name,world'
echo "$name, world"
echo $name"world"
echo $name'world'

??輸出的結(jié)果為

$name,world
hello, world
helloworld
helloworld

??字符串的一些函數(shù)

str="hello,world"
echo ${#str}                    //打印該字符串的長度
echo ${str:1:4}              //從下標(biāo)為1 的字符串截取長度為4 的字符

??數(shù)組的定義方式

1. arr_name=(value1 value2 ...)
2. arr_name=(
    value1
    value2
    ...
)
3. arr_name[0]=value1
   arr_name[1]=value2
echo ${arr_name[index]}         //獲取對(duì)應(yīng)下標(biāo)的字符串,當(dāng)index的值是@表示取所有
echo ${#arr_name[index]}      //獲取對(duì)應(yīng)下標(biāo)的長度

2. Shell傳遞參數(shù)

echo 'echo $0 $1 $2' > test.sh
sh test.sh 1 2
輸出: test.sh 1 2

??常用的關(guān)于參數(shù)的訪問如下

  $n          獲取傳遞腳本中第n個(gè)參數(shù),0代表執(zhí)行的文件名稱,n大于10時(shí),要用${n}
  $#          傳遞到腳本的參數(shù)個(gè)數(shù) 
  $*          以一個(gè)'單'字符串顯示所有向腳本傳遞的參數(shù)。
  $$          腳本運(yùn)行的當(dāng)前進(jìn)程ID號(hào) 
  $!          后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào) 
  $@          顯示所有向腳本傳遞的參數(shù)
  $?          顯示最后命令的退出狀態(tài)。0表示沒有錯(cuò)誤,其他任何值表明有錯(cuò)誤。   

3. Shell運(yùn)算符

??基本語法

`expr 運(yùn)算式`   eg: val=`expr 2 + 2` 注:expr運(yùn)算符間要有空格
$(( 運(yùn)算式))    eg: val=$((2+2))
$[運(yùn)算式]      eg: val=$[2+2]

??支持的所有運(yùn)算符包括算數(shù)運(yùn)算符、關(guān)系運(yùn)算符、布爾運(yùn)算符和邏輯運(yùn)算符等等。

算數(shù)運(yùn)算符

關(guān)系運(yùn)算符

布爾運(yùn)算符

邏輯運(yùn)算符

字符串運(yùn)算符

4.流程控制

1.IF ELSE

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi
eg: 判斷傳入?yún)?shù)的大小
l=$1
r=$2
if [ $l == $r ]
then
  echo "$l和$r相等"
elif [ $l -gt $r ]
then
  echo "$l大于$r"
else
  echo "$l小于$r"
fi

??if else也經(jīng)常和tes命令結(jié)合起來使用

if test 1 -eq 1
then echo "相等"
else echo "不相等"
fi
  1. for循環(huán)
    ??基本語法如下:
for var in item1 item2 ... itemN
do
    command1
    command2
    ...
done
eg:遍歷并輸出數(shù)組中的每個(gè)元素
arr=(1 2 3 4)
for item in ${arr[@]}
do 
    echo "值為:$item"
done 

3.while 循環(huán)
??基礎(chǔ)語法如下:

while condition
do
    command
done
eg: 輸出10以內(nèi)的偶數(shù)
n=0
while (($n <= 10))
do 
    printf "%s \t" $n
    n=$[2+$n]   
done

4.無限循環(huán)

1. 
while :
do
    command
done
2
while true
do
    command
done
3
for (( ; ; ))
do
    command
done
  1. util循環(huán)
在滿足條件之前,一直會(huì)執(zhí)行
until condition
do
    command
done
  1. case選擇
    基本語法如下
case 值 in
模式1)
    command1
    command2
    ...
    ;;
模式2)
    command1
    command2
    ...
    ;;
esac
eg: 根據(jù)選擇的數(shù)字進(jìn)行回應(yīng)
echo '請(qǐng)輸入你的選擇'
case $1 in
 1)
    echo "你選擇了1" ;;
 2)
    echo "你選擇了2";;
 *)
   echo "你選擇了其他";;
esac

5. Shell函數(shù)

基本語法如下:

[ function ] funname [()]
{
    action;
    [return int;]
}
eg:對(duì)傳入?yún)?shù)求和
function add(){
  echo "從函數(shù)中傳遞的參數(shù)為$1"
  echo "這是一個(gè)求和的函數(shù)"
  echo "請(qǐng)輸入第一個(gè)參數(shù)"
  read a
  echo "請(qǐng)輸入第二個(gè)參數(shù)"
  read b
  return $[ $a + $b ];
}

echo "函數(shù)開始"
var1=$[$1+1]
add $var1
var=$?
echo "函數(shù)執(zhí)行結(jié)束,結(jié)果為$var"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,711評(píng)論 0 5
  • 參考教程鏈接 http://www.runoob.com/linux/linux-shell.html Shell...
    VictorZhangWang閱讀 270評(píng)論 0 2
  • 一,shell題記 不懂shell的程序員不是好程序員,學(xué)習(xí)shell是為了自動(dòng)化,使用自動(dòng)化可以非常有效的提高工...
    架構(gòu)師小秘圈閱讀 8,784評(píng)論 3 70
  • 本文是對(duì)Linux shell編程的一個(gè)學(xué)習(xí)比較,共包括如下章節(jié)的內(nèi)容: 概述 基本語法 結(jié)構(gòu)化語句 函數(shù) 小結(jié) ...
    我是老薛閱讀 903評(píng)論 0 5
  • 概念和原理 Shell是什么? Shell 是一個(gè)用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。 Sh...
    陵無山閱讀 3,682評(píng)論 0 27

友情鏈接更多精彩內(nèi)容