// function 可以省略 ; fname 為函式的名稱
function fname()
函式的執行 :fname
定義乙個名為 12.sh 的函式指令碼
#!/bin/bash
# function
# local 定義的物件只能在函式類起作用(區域性變數)
checkid(
)
執行上面的sh函式指令碼
## 賦予當前使用者 12.sh的執行許可權
$ chmod u+x 12.sh
## 定義12.sh在當前程序下執行 (或者使用 ./12.sh )
$ source 12.sh
## 執行checkid 函式 判斷執行緒 1 是否存在
$ checkid 1
$ echo
$?# 結果:0
可以使用nice和renice 調整指令碼優先順序
避免出現「不可控的」死迴圈
死迴圈導致cpu占用過高
死迴圈導致宕機
linux ulimit命令用於控制shell程式的資源。
ulimit為shell內建指令,可用來控制shell執行程式的資源。
fork炸彈(大量建立子程序): .();. 或者 func() ;func
其中 func 是乙個函式名稱(隨意起的)
## 設定單一使用者程式上限
$ ulimit -u 500
## 顯示系統資源的設定
$ ulimit -a
kill缺省會傳送15號訊號給應用程式
ctrl+c傳送2號訊號給應用程式
9號訊號不可阻塞
建立 1.sh :
#!/bin/bash
# single demo
trap
" echo sig 15 " 15
trap
" echo sig 2 " 2
echo $$
while:do
:done
##
$ sh 1.sh
## ctrl + c (在此不能結束 指令碼的執行 ,因為1.sh中捕獲了 2 號命令)
# 結果:
# 32563 執行的程序號(pid)
# sig 15 (kill -15 32563 結果)
# sig 2 (ctrl + c 結果)
# killed (kill -9 32563 結果)
$ kill -15 32563
$ kill -9 32563
參考:linux之一次性(at)計畫任務及週期性(crontab)計畫任務
在指定的日期、時間點自動的執行預先設定的一些命令操作,屬於一次性計畫任務
系統服務的名稱:/etc/init.d/atd
設定格式:at [hh:mm] [yyyy-mm-dd]
atq命令:查詢當前設定的at任務列表 同 at -l
atrm命令:刪除指定任務編號的at任務 atrm 編號 同 at -d
at -c 任務號 檢視計畫任務的具體內容(和at計畫任務檔案/var/spool/at/以a開頭的檔案內容相同)
at 命令常用格式:
at [hh:mm]
at [hh:mm]
[yyyy-mm-dd]
at now +數字 [minutes|hours|days|weeks]
at 時間 -f 檔案 使用檔案中的命令作為計畫任務
at now +5 minutes -f /root/test.sh
## 建立計畫任務
[root@rhel3 ~]
# at 02:35
at>
ls /tmp
at>
job 4 at 2019-03-29 02:35
## 檢視計畫任務
[root@rhel3 ~]
# at -l
4 2019-03-29 02:35 a root
按照預先設定的時間週期(分鐘、小時、天…)重複執行使用者執行的命令操作,這屬於週期計畫人任務
服務名稱:/etc/init.d/crond
主要設定檔案:使用者定義的設定,位於檔案/etc/spool/cron/使用者名稱
cron服務配置檔案:/etc/crontab(包含三部分:注釋、環境變數、cron命令)
注意:crond計畫任務裡的命令有時可能不被執行,因為cron的環境變數path 跟系統的path 不太一樣,它的path 路徑預設值為:path=/sbin:/bin:/usr/sbin:/usr/bin,所以這就造成很多命令不能使用,解決辦法:1、自己設定cron的path環境變數 2、用命令的絕對路徑,如ls我們可以使用: /bin/ls
cron服務日誌檔案:/var/log/cron
管理cron計畫任務:
編輯計畫任務:crontab -e [-u 使用者名稱]
檢視計畫任務:crontab -l [-u 使用者名稱]
刪除計畫任務:crontab -r [-u 使用者名稱 ]
##
$ crontab -e
$ * * * * * /usr/bin/date >> /tmp/date.txt
## cron的執行日誌在 /var/log 目錄下 ,檔案為cron
$ cd /var/log |
tail -n 100 cron
參考:linux檔案鎖flock
anacontab延時計畫任務
flock 鎖檔案
用linux flock 檔案鎖實現任務鎖定,解決衝突
-s, --shared: 獲得乙個共享鎖
-x, --exclusive: 獲得乙個獨佔鎖
-u, --unlock: 移除乙個鎖,通常是不需要的,指令碼執行完會自動丟棄鎖
-n, --nonblock: 如果沒有立即獲得鎖,直接失敗而不是等待
-w, --timeout: 如果沒有立即獲得鎖,等待指定時間
-o, --close: 在執行命令前關閉檔案的描述符號。用於如果命令產生子程序時會不受鎖的管控
-c, --command: 在shell中執行乙個單獨的命令
-h, --help 顯示幫助
-v, --version: 顯示版本
元字元擴充套件元字元
檔案的查詢命令find
文字內容的過濾(查詢)grep
字串 do one thing at a time,and do well.
匹配字元 an
元字元:
. 匹配除換行符外的任意單個字元
##
$ grep password /root/anaconda-ks.cfg
## .... 表示4個任意字元
$ grep pass..
.. /root/anaconda-ks.cfg
## pass.... 長度為7,以pass開頭後面4個結束
$ grep pass..
..$ /root/anaconda-ks.cfg
## pass開頭的任意字元。。。
$ grep pass.* /root/anaconda-ks.cfg
$ grep
[pp]ass.* /root/anaconda-ks.cfg
$ grep ^# /root/anaconda-ks.cfg
## 匹配 . 號
$ grep
"/." /root/anaconda-ks.cfg
擴充套件元字元:
+匹配前面的正規表示式至少出現一次
?匹配前面的正規表示式出現零次或一次
|匹配它前面或後面的正規表示式
$ find /etc -name pass*
$ find /etc -regex .*wd
linux指令碼 函式和引數
如何定義乙個引數?function fname statements 或者fname statemants 即可 執行函式 fname 執行函式 傳遞引數 fname arg1 arg2 傳遞引數 我們可以在函式中使用引數 fname echo 1 2 列印第乙個和第二個引數 echo 列印全部引數...
linux 指令碼 函式編寫
為增加 復用性,建立函式 函式1,func1.sh 同一指令碼內呼叫 bin bash 定義變數 user aaa display display source func1.sh 到入庫 或者 func1.sh 函式2,func2.sh 跨指令碼呼叫 bin bash 引入外部指令碼 使用sourc...
shell指令碼 迴圈和函式
1 列印乙個等腰三角形 bin bash for i in seq 10 do for j in seq 10 i do echo n done for k in seq i 2 1 do echo n done echo done 2 列印99乘法表 bin bash for i in do fo...