shell腳本應用(一)

1.編制個人第一個shell腳本linux

shell腳本是什麼我來簡單的說一下,shell腳本是linux系統中的一個特殊程序,他工做在操做系統內核與應用之間,充當了一個"命令解釋器"的角色,負責接收用戶輸入的操做指令並進行解釋,將須要執行的操做傳遞給內核執行,並輸出結果。shell

咱們來看看我本身的系統支持什麼樣的shell腳本種類vim

[root@dbserver ~]# cat /etc/shells bash

/bin/shoracle

/bin/bashapp

/sbin/nologinide

........下邊的用不上
spa

這裏,/bin/sh是linux版本採用的默認shell腳本,Bash的全稱爲Bourne Again Shell,是最受歡迎的開源項目。操作系統

其實Shell腳本就是將平時使用的各類Linux命令按順序保存到一個文本文件,添加執行權限,這個文件就能夠叫作shell腳本了。例:server


[root@dbserver script]# cat first.sh 

#!/bin/bash

cd /boot

pwd

ls -lh vml*


[root@dbserver script]# chmod +x first.sh 

[root@dbserver script]# ./first.sh 

/boot


-rwxr-xr-x. 1 root root 4.0M Nov 11  2013 vmlinuz-2.6.32-431.el6.x86_64

這裏我執行了三條命令,cd /boot,pwd, ls -lh vml*,執行此腳本後發現沒,和這三條命令輸出的結果是同樣的,這能夠說是一個'批量處理'的自動化過程。

咱們編寫腳本時要養成一個好習慣就是遵循標準的腳本結構,讓腳本能輸出友好的提示信息,更加容易讀懂,對於代碼較多,機構複雜的腳本,應當添加必要的註釋文字,以下改寫後的腳本:


[root@dbserver script]# cat first.sh 

#!/bin/bash

cd /boot

echo  "In the current directory:"       //當前的目錄位於

pwd

echo  "Begin with VML files including:"  //其中以VML開頭的文件包括

ls -lh vml*

[root@dbserver script]# ./first.sh 

In the current directory:

/boot

Begin with VML files including:

-rwxr-xr-x. 1 root root 4.0M Nov 11  2013 vmlinuz-2.6.32-431.el6.x86_64


是否是很直白明瞭,哈哈!

還有別的方法就是不用加執行權限就能直接執行,例如:

[root@dbserver script]# sh first.sh  //經過/bin/sh來解釋腳本

[root@dbserver script]# . first.sh    //經過點號來加載腳本

Linux系統中包括大量的Shell腳本文件,如/etc/init.d目錄下的各類服務控制腳本這些Shell腳本只能用來參考,儘可能避免直接修改系統腳本,以避免致使服務或系統故障

2.重定向與管道操做

1).重定向操做:用戶經過操做系統處理信息的過程當中,包括如下幾類交互設備文件:

標準輸入(STDIN):默認設備是你的鍵盤,文件編號爲0,命令將從標準輸入文件中讀取在執行過程當中須要的輸入數據。

標準輸出(STDOUT):默認設備是你的顯示器,文件編號爲1,命令將執行後的輸出結果發送到標準輸出文件。

標準錯誤(STDERR):默認設備是你的顯示器,文件編號爲2,命令將執行期間得各類錯誤信息發送到標準錯誤文件。

關聯起來講就是標準輸入輸出和標準錯誤默認使用鍵盤和顯示器做爲關聯的設備,與操做系統進行交互,完成最基本的輸入、輸出操做。這句話理解起來就是你經過鍵盤輸入的各類命令字串,輔助控制信息,將命令輸出到屏幕上,命令執行錯誤,錯誤信息也會反饋到屏幕上。在實際的Linux系統維護中,能夠改變輸入輸出的內容方向,而不使用默認的標註輸入輸出設備(這裏指鍵盤和顯示器),這種操做就叫作重定向。

重定向輸出:使用">"或">>"操做符號,分別用於覆蓋或追加文件,例:


[root@dbserver ~]# uname -p > kernel.txt         //輸出結果會覆蓋到此文件中

[root@dbserver ~]# cat kernel.txt 

x86_64                              //CPU類型信息

[root@dbserver ~]# uname -r >> kernel.txt  //輸出結果會追加進去而不是覆蓋

[root@dbserver ~]# cat kernel.txt   

x86_64

2.6.32-431.el6.x86_64            //CPU內核版本信息


重定向輸入:將命令中接收輸入的途徑由默認的鍵盤改成指定的文件,例如:


[root@dbserver ~]# vim pass.txt   //在文本中添加初始密碼爲"123456"

123456

:wq

[root@dbserver ~]# passwd  --stdin root < pass.txt    //從pass.txt文件中取密碼

Changing password for user root.

passwd: all authentication tokens updated successfully.  //成功了


錯誤重定向:是執行命令過程當中出現的錯誤信息(選項過參數錯誤)保存到制定的文件中去,而不是直接顯示到屏幕上,錯誤重定向使用'2>'操做符,其中'2'是指錯誤文件的編號(在使用標準輸入輸出重定向時省略了1,0編號),在實際應用中,錯誤重定向可用來收集程序執行的錯誤信息,爲排錯提供依據,對於shell腳本,還能夠把可有可無的錯誤信息重定向到空文件中,以保持輸出腳本的整潔,例:

[root@dbserver ~]# tar jcf /nonedir/etc.tgz  /etc/ 2> error.log 

[root@dbserver ~]# cat error.log 

tar: Removing leading `/' from member names

tar (child): /nonedir/etc.tgz: Cannot open: No such file or directory

tar (child): Error is not recoverable: exiting now

使用'2>'操做符時,會像使用'>'操做符同樣覆蓋目標文件的內容,若要追加內容可使用’2>>'操做符

,有時候你須要編譯Apache這些包,你能夠把make、make install 這些操做信息定向到空件/dev/null中。省去這些信息。

3.管道操做:

管道操做做爲不一樣命令之間的協同工做提供了一種機制,位於管道"|"左側的命令輸出結果,將做爲右側命令的輸入(處理對象),對於同一行命令可使用多個管道,在shell腳本應用中,管道操做一般用來過濾所須要的關鍵信息。例:


[root@dbserver ~]# grep "/bin/bash$" /etc/passwd

root:x:0:0:root:/root:/bin/bash

oracle:x:500:500::/home/oracle:/bin/bash

zhangsan:x:501:502::/home/zhangsan:/bin/bash

lisi:x:502:503::/home/lisi:/bin/bash

wangmazi:x:503:504::/home/wangmazi:/bin/bash

[root@dbserver ~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'

root /bin/bash

oracle /bin/bash

zhangsan /bin/bash

lisi /bin/bash

wangmazi /bin/bash

上述例子中awk命令的做用是以冒號":"做爲分隔,輸出第一個和第七個區域的字符串,其中的"-F"部分用來指定分隔符號,未指定時默認爲空格,關於他的用法請大家多查查資料,這個用的不少的,再舉個例子,下面例子中過濾的是/目錄的使用率爲多少:


[root@dbserver ~]# df -hT 

Filesystem               Type    Size   Used    Avail  Use%   Mounted on

/dev/mapper/vg_rhel1-lv_root   ext4    45G    15G     29G   34%       /

tmpfs                 tmpfs    936M   72K     936M     1%    /dev/shm

/dev/sda1               ext4    485M    39M    421M    9%     /boot

[root@dbserver ~]# df -hT |grep "/$" |awk    '{print $6}'

34%


今天先寫到這把,明天把shell變量怎麼用再給大家寫寫,這東西還有不少,敬請看我更新,咋們從最基礎的作起!!

相關文章
相關標籤/搜索