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/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 檔案的各種屬性。
字串運算子:
布林運算子:
關係運算符:
只支援數字,不支援字串,除非字串的值是數字。常見的有:
算數運算子:
原生bash不支援簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr. 下面使用expr進行; expr是一款表示式計算工具,使用它可以完成表示式的求值操作;
比如:
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