那些天,shell指令碼中曾經踩過的坑

2022-05-04 05:12:07 字數 2119 閱讀 2176

前些天,需要實現乙個需求,用指令碼輪流kill伺服器上的程序,觀察記憶體變化情況,並寫日誌。指令碼邏輯不難,但shell指令碼好久不用,看過書裡的語法都忘得差不多了,中間踩了不少的坑,特此記錄一下,留作後續參考。

指令碼使用了兩個函式,第乙個是去查詢記憶體變化,並不斷寫日誌。用了乙個loop變數來記錄次數,然後就是用echo和》符號不斷寫進日誌檔案,要注意的是shell指令碼中用··(鍵盤1旁邊的那個符號,不是單引號)包含linux命令,用$符號對變數做引用。如果函式需要傳參,則在函式體內,用$1表示第乙個引數,$2表示第二個引數,以此類推。部分**如下:

function

memoryquery()

該函式的呼叫方法為memoryquery signal

第二個函式是去不斷kill各種程序,程序名稱為傳入引數,並在第二個函式中,完成程序殺除後,去呼叫前乙個記憶體查詢函式。函式**如下:

function

killprocess()

由於工作需要對使用者提交的資料進行驗證,這是乙個簡單的日期正則驗證例項,有需要了解的同學可參考。

shell中的if語句需要做乙個正則判斷,查了一下語法記錄之。12

3456

datepattern="^[0-9]-[0-9]-[0-9]$"

if[["$startdate"=~ $datepattern ]] && [[ $enddate =~ $datepattern ]];then:

else

echo"date format is invalid!"

exit;

fi

常用的正規表示式12

if[["$file"=~'start']]

if[["$file"=~"start"]]

例子:123

4567

8#!/usr/bin/ksh

file="10start11.s"

if[["$file"=~"start"]]

then

echo"success"

else

echo"failed"

fi

只有bash才支援[[

ksh在test中應該不支援正則,用awk grep sed等工具實現吧12

3456

flag=`echo$file|awk'/start/'`

if["$flag"=""];then

echo"success"

else

echo"failed"

fi

那些天我踩過的坑

使用knockoutjs時候,千萬不要在迴圈繫結中把dom元素的id寫死。例如在 input file 中 banging event change 時,千萬不要在ko.observablearray 中固定id屬性。如下所示 label for up img class am btn am btn...

shell編寫踩過的坑

1 linux在shell中執行命令並將結果賦值給變數 通過埠號獲取容器名稱 container name docker ps grep port awk f 2 if判斷 if container name then 執行時報 not found 的錯誤,if判斷那塊有個坑,if後面加空格,條件兩...

那些年踩過的CSS坑

1 img 標籤中的alt 與title的區別 title 滑鼠滑過時顯示的文字提示。對seo優化的影響 搜尋引擎對理解是通過alt屬性,所以在alt屬性中包含關鍵字的簡要文字說明,也是頁面優化的一部分。2 padding與margin區別 padding是控制項的內容相對控制項的邊緣的邊距,mar...