您好,登錄后才能下訂單哦!
接著之前的內容繼續講shell編程的基礎。
這部分還是先要鞏固重定向的使用,以及創建自己的文件描述符,在編寫shell腳本中關注臨時重定向和永久重定向的用法。
(1)< <<
(2)> >>
為了區分如上的重定向符號,大家搞懂以下2個例子就行:
cat > file <<eof;
cat >> fileA <fileB
實際使用中輸入重定向還是比較少,多數是輸出重定向
&> 表示stdout和stderr都重定向
對于文件描述符,我們不光要掌握0,1,2,還要能夠自己創建自己的文件描述符,且在shell編程中與默認的標準文件描述符進行組合使用。比如說要恢復文件描述符就是一個例子。
exec 3 >&1
exec 1> testfile
...
...
exec 1>&3
...
...
以上是輸出重定向的恢復,輸入重定向如下
exec 6 <&0
exec 0 <filein
...
exec 0 <&6
關閉文件描述符
exec 3 >&-
還有一種<>讀寫文件描述符的,慎用,最好是讀完后再重定向寫入,不然shell維護的內部指針會把文件內容搞得很混亂。
創建臨時文件和目錄
mktemp file.XXXXXX
mktemp -t 創建在/tmp下面且返回絕對路徑
mktemp -d創建目錄
tee的使用
tee -a
重定向講完,再講講腳本的控制。腳本的控制主要是信號的處理。
用kill -l就可以看到linux支持的信號。這些信號是一類“軟中斷信號”,信號分為硬中斷信號和軟中斷信號,在中斷處理的上半部分由硬中斷執行,下半部分一般都是交給軟中斷執行。linux中的kill方式就是用戶態下進程間異步信號通信的一種方法。按照不同的角度,還可以把信號分為實時和非實時,可靠和非可靠。
大部分信號都是會去停止,終止進程,但是還是有細微差異,比如信號是否可以捕獲,是否可以忽略等等,信號的默認動作也是不一樣的,有些會觸發dump core。
基本掌握 ctrl+c ctrl+z 對應的信號
捕獲信號使用trap “:” SIGINT
放棄捕獲 trap --SIGINT
可以使用trap實現簡單的跳板機程序
腳本還可以在后臺執行 bash xx.sh &
如果希望終端退出不影響腳本的執行使用nohup
執行腳本就會產生進程,進程是需要占用內存和cpu資源的。一般通過nice renice來調整謙讓度-20~19,值越低cpu需求越高。也可以用cpulimit和cgroup來實現進程的資源管理。cgroup可以對一組進程進行管理限制,且不限于cpu,memory,blkio也行。
定時腳本也是腳本控制的一個內容,at命令可以完成簡單的需求。更多的還是使用crontab文件或者crontab命令來實現,anacron也需要了解一下。
函數是基礎語法的最后一部分。
結構:
function xxx()
{
}
xxx()
{
}
在shell中變量默認都是全局的,如果要局部使用請加local
數組類等復雜變量無法直接傳遞,可以拆分后再組合來實現效果。
注意函數位置變量和腳本位置變量的關系,別混淆。
shell函數也能實現遞歸等操作。
shell定義函數也有單行的表示方式。
shell編寫腳本后,可以把一些公共的標準函數放到一個shell文件中,后續在別的腳本中直接以庫的形式引用,source和點操作符.來實現。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。