編寫shell指令碼的常用知識點

2021-10-04 08:48:32 字數 2911 閱讀 2248

path=

"/back/task/subtask/partition/db/table"

old_ifs=

"\$ifs"

ifs=

"/"

data=

(\$path

) ifs=

"\$old_ifs"

for i in \$;do

echo

"\$i=>\$"

done

echo

"num:\$"

date=

"2020-03-21"

date=\$(

echo

"\$partitionid"

|sed

's/-//g'

)

再輸出date就是:20200321

這裡判斷是不是以"/"結尾

if

["$"

=="/"];

then

fi

var=$

這裡為如果不包含

if [[ $restoredinfo != *"$str"* ]]

if [[ 「x$errorlog」 != 「x」 ]]

array=($)(把","替換成了空格,正好轉換成乙個陣列)

errorlog=$(echo -n $detachsql|eval $ck_bin | grep -i exception)

[

"`ls -a $/data`"==

""]

source task.sh

這個語句是引用同路徑下的task.sh,如果要用絕對路徑,在前面加上路徑即可

命令1 && 命令2 || 命令3 :意思就是命令1返回為真,執行命令2;命令2返回為假,執行命令3

如:判斷某目錄是否存在,存在輸出exist,不存在就建立(替代了if/else)

[ -d /data/db/table ] && echo 「exist」 || mkdir -p /data/db/table

#遠端host,並刪除某檔案

ssh -p$port root@$host

"source /etc/profile; rm /path/a.txt"

command 1 | command 2

他的功能是把第乙個命令command 1執行的結果作為command2的輸入傳給command 2

如:errorlog=$(echo -n $detachsql|eval $ck_bin | grep -i exception)

# 以"#"為分隔符,$0表示所有 $1表示第乙個 $nf表示最後乙個 $(nf-1)表示倒數第二個

eval

$(echo $var |

awk -f "#" '')

語法:eval cmdline

eval會對後面的cmdline進行兩遍掃瞄,如果第一遍掃瞄後,cmdline是個普通命令,則執行此命令;如果cmdline中含有變數的間接引用,則保證間接引用的語義。

如:

# 會把拆分後的結果的第乙個,第二個,第三個分別賦值給id,path,emptydetach

eval

$(echo $var |

awk -f "#" '')

$?表示"最後一次執行命令"的退出狀態.0為成功,非0為失敗

if

[$? -ne 0 ]

;then

restoredinfo=

"$restoredinfo,$ckhost:$ckport#

$partitionid#

$ckdiskpath"

errorcode=1

break

fi

代表非正常執行導致退出程式

其實目的就是: 程式退出後, 使用者可以 echo $? 來檢視是 0 還是 1, 從而達到檢測程式是正常結束退出還是產生錯誤而退出的目的.

while

[ -n "$1"]do

case

"$1"

in -c|--command) command=$2;

shift 2;

; -d|--db) db=$2;

shift 2;

; --)

break;;

*)echo

"param not exist"

;exit 1 ;

; esac

done

shift n表示把第n+1個引數移到第1個引數, 即命令結束後1的值

等於

1的值等於

1的值等

於n+1的值, 而命令執行前的前面n個引數不能被再次引用, 後面katex parse error: expected 'eof', got '#' at position 1: #̲-n+1到#的引數被unset, 引數的個數減少為$#-n個.

while

[ -n "$1"]do

case

"$1"

in -c|--command) command=$2;

shift 2;

; -d|--db) db=$2;

shift 2;

; --)

break;;

*)echo

"param not exist"

;exit 1 ;

; esac

done

/bin/bash^m: 壞的直譯器: 沒有那個檔案或目錄

解決:sed -i 『s/\r$//』 test.sh

shell常用知識點

0 shell中if,while的條件語句怎麼寫 test和 字串比較 數字比較 g,l,e,n,q,t的組合 greater than,less than,equil,not equil,greater equil,less equil 1 shell的字串 str hello str hello...

Shell指令碼知識點積累

str aaaaaaaaaaaaaa bbbbbbb str1 匹配第乙個,進行擷取 echo new str1 str1 str2 匹配最後乙個,進行擷取 echo new str2 str2 str aaaaaaaaa cc str1 匹配第乙個,進行擷取 echo new str1 str s...

shell指令碼知識點彙總

sed中在對內容進行修改時,有時候需要引用外部變數的值或者獲取乙個shell命令執行的結果,以便達到更加可觀的輸出結果 1 sed中使用變數替換 1 sed命令使用雙引號的情況下,使用 var直接引用 rooot 192 cat test.txt 192.168.53.128 contiv name...