shell指令碼之基礎
Linux之shell指令碼 Shell就是一個命令列直譯器,它的作用就是遵循一定的語法將輸入的命令加以解釋並傳給系統。開啟文字編輯器(可以使用vi/vim命令來建立檔案),新建一個檔案test.sh,副檔名為sh(sh代表shell)。 一、算術運算子 + 加法 - 減法 * 乘法 / 除法 % 取餘 = 賦值 == 相等 != 不相等 二、關係運算符 -eq 檢測兩個數是否相等,相等返回 true。 -ne 檢測兩個數是否不相等,不相等返回 true。 -gt 檢測左邊的數是否大於右邊的,如果是,則返回 true。 -lt 檢測左邊的數是否小於右邊的,如果是,則返回 true。 -ge 檢測左邊的數是否大於等於右邊的,如果是,則返回 true。 -le 檢測左邊的數是否小於等於右邊的,如果是,則返回 true。 三、字串運算子 = 檢測兩個字串是否相等,相等返回 true。 != 檢測兩個字串是否相等,不相等返回 true。 -z 檢測字串長度是否為0,為0返回 true。 -n 檢測字串長度是否為0,不為0返回 true。 str 檢測字串是否為空,不為空返回 true。 四、檔案測試運算子 -b file 檢測檔案是否是塊裝置檔案,如果是,則返回 true。 -c file 檢測檔案是否是字元裝置檔案,如果是,則返回 true。 -d file 檢測檔案是否是目錄,如果是,則返回 true。 -f file 檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。 -g file 檢測檔案是否設定了 SGID 位,如果是,則返回 true。 -k file 檢測檔案是否設定了粘著位(Sticky Bit),如果是,則返回 true。 -p file 檢測檔案是否是有名管道,如果是,則返回 true。 -u file 檢測檔案是否設定了 SUID 位,如果是,則返回 true。 -r file 檢測檔案是否可讀,如果是,則返回 true。 -w file 檢測檔案是否可寫,如果是,則返回 true。 -x file 檢測檔案是否可執行,如果是,則返回 true。 -s file 檢測檔案是否為空(檔案大小是否大於0),不為空返回 true。 -e file 檢測檔案(包括目錄)是否存在,如果是,則返回 true。 五、例項 1.模擬linnux登入shell
/bin/bash
echo -n “login:” #-n 字串長度不為零 read name echo -n “password:” read passwd if [ passwd = “abc” ];then #-a 兩個表示式都為true,返回true echo “the host and password is right!” else echo “input is error!” fi 2.比較兩個數大小
/bin/bash
echo “please enter two number”
read a #輸入的引數
read b
if test
/bin/bash
echo “enter a file name:” read a if test -e /root/$a #e表示檔案或目錄存在,返回true then echo “the file is exist!” else echo “the file is not exist!” fi
/bin/bash
clear for num in 1 2 3 4 5 6 7 8 9 10 do echo “$num” done 5.檢視使用者是否執行
/bin/bash
echo “Please enter a user:” read a b=a = $b then echo “the user is running.” else echo “the user is not running.” fi 6.刪除當前目錄下大小為0的檔案
/bin/bash
for filename in ls
do
if test -d (ls -l a -eq 0
then rm $filename
fi
fi
done
7.如果/export/um_lpp_source下有檔案,那麼將其檔案系統大小改為3G
/bin/bash
while line=ls /export/um_lpp_source
do
if test line
chfs -a size=3G /export/um_lpp_source #a與運算
exit 0
fi
done
8.測試IP地址
/bin/bash
for i in 1 2 3 4 5 6 7 8 9 do echo “the number of i #c字元裝置檔案 done 9.如果test.log的大小大於0,那麼將/opt目錄下的*.tar.gz檔案
/bin/sh
a=2
while name=”test.log”
do
sleep 1
b=name | awk ‘{print b -ge $a
#then echo “OK”
then cp /opt/*.tar.gz .
exit 0
fi
done
10.列印讀取的內容,為下面的例子做準備
/bin/bash
while read name do echo $name done 11.從0.sh中讀取內容並列印
/bin/bash
while read line do echo $line done < 0.sh 12.讀取a.c中的內容並做加1運算
/bin/bash
test -e a.c while read line do a=line+1)) done < a.c echo $a 13.普通無引數函式
/bin/bash
p () { echo “hello” } p 14.給函式傳遞引數
/bin/bash
p_num () { num=num } for n in n done 15.建立資料夾
/bin/bash
while : do echo “please input file’s name:” read a if test -e /root/a echo “you aye sussesful!” break fi done 16.獲取本機IP地址
/bin/bash
ifconfig | grep “inet addr:” | awk ‘{ print $2 }’| sed ‘s/addr://g’ #sed是一種流編輯器,它是文字處理中非常中的工具,能夠完美的配合正則表示式使用。 17.查詢最大檔案
/bin/bash
a=0 for name in . do b=name | awk ‘{print b -ge b namemax=namemax” 18.查詢當前網段內IP使用者,重定向到ip.txt檔案中
/bin/bash
a=1 while : do a=a+1)) if test (ping -c 1 192.168.0.