1. 程式人生 > >Linux(十)shell指令碼

Linux(十)shell指令碼

一、shell定義:

使用者直接面對的不是計算機硬體而是shell。使用者將指令告訴shell,然後shell傳輸給系統核心。接著核心支配計算機硬體。

我們在Linux中輸入命令的介面就成為shell。

二、shell指令碼知識

2.1、開頭#!/bin/sh

#!/bin/sh是指此指令碼使用/bin/sh來解釋執行,#!是特殊的表示符,其後面跟的是此解釋此指令碼的shell的路徑。

$ cat /etc/shells可以檢視系統支援的shell格式

其實第一句的#!是對指令碼的直譯器程式路徑,指令碼的內容是由直譯器解釋的,我們可以用各種各樣的直譯器來寫對應的指令碼。

比如說/bin/csh指令碼,/bin/perl

指令碼,/bin/awk指令碼,/bin/sed指令碼,甚至/bin/echo等等。

#!/bin/bash同理。

2.1變數

2.1.1普通變數(關閉shell後或切換shell後失效)

abc=123         //定義變數
echo $abc        //讀取變數

unset abc        //取消變數

2.1.2環境變數:系統預定義的引數

臨時的:export 變數名=值。

              變數在關閉shell時失效。切換shell也生效。(sh      :切換shell   exit:退出)

             su 使用者;切換使用者,但是shell還是之前那個shell,臨時環境變數還存在

             su -使用者:真正意義的切換使用者,切換了使用者的shell。臨時環境變數就不存在了。

2.1.3位置變數

三、運算子

檔案測試運算子:

檢測 Unix 檔案的各種屬性。

image

字串運算子:

image

布林運算子:

image

關係運算符:

只支援數字,不支援字串,除非字串的值是數字。常見的有:

image

算數運算子:

原生bash不支援簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr. 下面使用expr進行;  expr是一款表示式計算工具,使用它可以完成表示式的求值操作;

image

比如:

a=10
b=20
expr $a + $b
expr $a - $b
expr $a \* $b
expr $a / $b
expr $a % $b
a=$b

注意: 1. 在expr中的乖號為:\*

2. 在 expr中的 表示式與運算子之間要有空格,否則錯誤;

3. 在[ $a == $b ]與[ $a != $b ]中,要需要在方括號與變數以及變數與運算子之間也需要有括號, 否則為錯誤的。(親測過)

四、shell指令碼語法

4.1case語法

#! /bin/bash
echo "please input a number (1-4)"
read num
echo "your input number is $num"
case "$num" in
1)
echo "one"
;;
2)
echo "two"
;;
3|4)
echo "three or four"
;;
*)
echo please input 1 -4
;;                        //每個case語句都以;;結尾
esac                      //以esac結尾

4.2、if語法

#! /bin/bash
echo "please input a director judge if is"
read a
echo "director is $a"
if [ !  -d /usr/aaaaaaaaaaaaaaa ];then    //路徑也可以直接用$a
mkdir -p /usr/aaaaaaaaaaaaaaaa
elif [條件2];then
執行語句。。。
else
執行語句。。。
fi

#1 /bin/bash
read -p "請輸入你的成績:" a
if [ $a -ge 90 ] && [ $a -le 100 ];then
echo "您成績很棒棒哦"
elif [ $a -ge 70 ] && [ $a -le 89 ];then
echo "你成績一般般鴨"
else
echo "你個垃圾"
fi

4.3、for迴圈(兩種)

#! /bin/bash
for ((i=0;i<10;i++))
do
sum=$((sum+i))
echo $sum
done

#!/bin/bash
for a in {1,1,1,1,1,11,}
do
echo $a
done

4.4 while和util迴圈

COUNTER=0
while [ "$COUNTER" -lt 5 ]   //while為條件為true時執行。util反之
do
   COUNTER=$((COUNTER+1))
    echo $COUNTER
done