shell指令碼常用命令(乾貨)

2021-09-27 07:01:48 字數 3101 閱讀 1124

本文適合初學者快速入門
新建乙個字尾名為.sh的檔案就可以開啟shell指令碼之旅了

shell指令碼的首行要這樣寫:#!/usr/bin/bash

或者可以寫成:#!/usr/bin/env bash

#!/usr/bin/env bash的

優點:1.使用者不需要去尋找程式在系統中的位置(因為在不同的系統,命令或程式存放的位置可能不同),只要程式在你的$path中;

2.它會根據你的環境尋找並執行預設的版本,提供靈活性。(儲存使用者資訊的檔案/etc/passwd)

缺點:有可能在乙個多使用者的系統中,別人在你的$path中放置了乙個bash,可能出現錯誤。

大部分情況下,/usr/bin/env是優先選擇的,因為它提供了靈活性,特別是你想在不同的版本下執行這個指令碼;而指定具體位置的方式#!/usr/bin/bash,在某些情況下更安全,因為它限制了**注入的可能。

echo是比較常用的shell指令碼的命令,用來輸出一段字串

#!/bin/bash

echo "hello world !"

eval可以用來執行一段linux命令,用shell指令碼來執行linux

命令,eval不可或缺

比如:用指令碼來實現監測伺服器上服務的執行狀態

我做的這個功能不僅要進行監測,還要去判斷當前伺服器的作業系統型別,根據不同的作業系統執行相應的linux命令,因為不同系統能使用的linux命令也不同,專案在不同系統上的服務名稱都不一樣,這個功能呼叫公司寫好的乙個方法就可以實現了,我就只拿出監測伺服器上的服務執行狀態,如果服務未啟動或異常關閉,自動重新啟動的乙個指令碼(需要設定定時任務來定時執行這個指令碼來監測)

#!/usr/bin/env bash

result=$(eval "systemctl status rabbitmq-server.service")

active="active (running)"

if [[ $result == *$active* ]]

then

echo "rabbitmq has started"

else

eval "systemctl start rabbitmq-server.service"

echo "rabbitmq start succeed"

fi

這段**對於初學者來說就可以說明很多指令碼的常見寫法了

1.$$用來取值,這裡要注意,需要取的是執行命令後的返回結果,需要加上括號

2.if else

這裡的if else用來做判斷,需要注意的是在判斷條件中的==兩邊都要有空格,如果沒有空格會導致判斷結果一直為true,這裡又涉及到了判斷乙個字串是否包含另乙個字串,方式有很多,這裡不過多介紹,就說以下這三種:

a.用字串運算子

stra="chenglong"

strb="eng"

if [[ $stra =~ $strb ]]

then

echo "包含"

else

echo "不包含"

fi

b.用萬用字元*,也就是上面例子中用到的方式

a="chenglong"

b="eng"

if [[ $a == *$b* ]]

then

echo "包含"

else

echo "不包含"

fi

c.用case in語句

thisstring="a b c d e" # 源字串

searchstring="a b" # 搜尋字串

case $thisstring in

*"$searchstring"*) echo enemy spot ;;

*) echo nope ;;

esa

sed命令的語法有很多種,我這次只用到了sed -i,就先只介紹這一種吧

sed -i就是用來操作文字檔案的

sed -i 's/原字串/新字串/' /opt/test.txt

sed -i 's/原字串/新字串/g' /opt/test.txt

這是test.txt檔案的內容:

#cat test.txt

sssss

這是執行這兩條命令的結果

sed -i 's/d/886/' /opt/test.txt

執行結果

886886sss

sed -i 's/d/886/g' /opt/test.txt

執行結果

886886886886886

去掉 「行首」 帶「¥」的首個字元¥

sed -i 's/^¥//' file
特定字串的行前插入新行

sed -i '/特定字串/i 新行字串' file
特定字串的行後插入新行

sed -i '/特定字串/a 新行字串' file
例項:

sed -i '/service/a restart=always' /usr/lib/systemd/system/rabbitmq-server.service
這段**就是在 /usr/lib/systemd/system/rabbitmq-server.service這個檔案中查詢「service」,並在這個特定字串之後新增一行「restart=always」,這裡需要注意,實際上rabbitmq-server.service檔案中的特定字串是[service],如果指令碼中也輸入[service],會造成執行指令碼後,rabbitmq-server.service檔案中原來的每一行下面都增加了一行restart=always。

特定字串的刪除

sed -i '/字串/d' file
暫時先總結到這!

shell指令碼常用命令

basename 1.basename 是去除目錄後剩下的名字 example shell temp home temp 1.test shell base basename temp shell echo base 結果為 1.test 2.dirname 是取目錄 example shell t...

Shell 指令碼學習筆記 常用命令

可以對靜態庫進行操作 create and maintain library archives 檢視庫中所包含的檔案列表 ar t libx armv7.a symdef sorted common.o counter.o cv.o debug.o dll.o mu.o mu wait.o note...

shell指令碼常用命令簡單總結

整理自個人筆記和網路 1.shell中位置引數 0 這個程式的執行名字 n 這個程式的第n個引數值,n 1.9 這個程式的所有引數,此選項引數可超過9個。這個程式的引數個數 這個程式的pid 指令碼執行的當前程序id號 執行上乙個背景指令的pid 後台執行的最後乙個程序的程序id號 執行上乙個指令的...