1. 程式人生 > >shell指令碼之基礎

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 [ name="cht"apasswd = “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

aeqb #eq表示a和b數相同就返回true then echo “NO.1 = NO.2” elif test agtb #gt表示a和b大小相同返回true then echo “NO.1 > NO.2” else echo “NO.1 < NO.2” fi 這裡寫圖片描述 3.查詢/root/目錄下是否存在該檔案

/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 這裡寫圖片描述

4.for迴圈的使用

/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=(whoami)iftesta = $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 filename #d檢測是否是塊裝置檔案      then b=0      else         a=(ls -l filename|awkprint$5)iftesta -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=thenechoNULLsleep1elseecholine 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 icomputerispingc1192.168.0.i #c字元裝置檔案 done 這裡寫圖片描述 9.如果test.log的大小大於0,那麼將/opt目錄下的*.tar.gz檔案

/bin/sh

a=2 while name=”test.log” do sleep 1 b=(lslname | awk ‘{print 5}’) #awk是一種程式語言,用於在linux/unix下對文字和資料進行處理它支援使用者自定義函式和動態正則表示式等先進功能,是linux/unix下的一個強大程式設計工具。          if testb -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=1echonum } for n in @dopnumn done 這裡寫圖片描述 15.建立資料夾

/bin/bash

while : do echo “please input file’s name:” read a if test -e /root/athenechothefileisexistingPleaseinputnewfilename:elsemkdira 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=(lslname | awk ‘{print 5}’)      if testb -ge athena=b namemax=namefidoneechothemaxfileisnamemax” 這裡寫圖片描述 18.查詢當前網段內IP使用者,重定向到ip.txt檔案中

/bin/bash

a=1 while : do a=((a+1)) if test agt255thenbreakelseecho(ping -c 1 192.168.0.