shell指令碼 函式應用 指令碼除錯與sed工具

2021-10-07 20:09:09 字數 4618 閱讀 7894

shell函式也是我們經常要使用的,因為有一些命令序列是需要反覆呼叫執行的,若每次使用同一命令就重複寫一遍,就會導致**量很大,行數特別多。

為解決該問題我們可以將命令序列按格式寫在一起,定義為一項函式,以便可以重複使用。

函式定義基本格式?

[function] 函式名(

)若有些時候我們呼叫的函式很多,那麼我們可以一次寫好幾個

舉例:

#!/bin/bash

#這是乙個計算器

jia(

)jian(

)cheng(

)chu(

)while

[ -z $a]||

[[$a== *[

!0-9]* ]]do

read -p "請輸入乙個數字:" a

done

read -p '輸入你的計算方式( + - x / )' i

while

[ -z $b]||

[[$b== *[

!0-9]* ]]do

read -p "請輸入第二個數字" b

done

case

$iin

+) jia

echo

"$a + $b = $he";;

-)jian

echo

"$a - $b = $cha";;

x)cheng

echo

"$a x $b = $ji";;

/)chu

echo

"$a / $b = $sahng";;

*)echo

'請輸入正確的運算符號'

esac

bash內建指令碼除錯命令?

sh [-nvx] 指令碼名
常用的具體含義為:

當指令碼檔案較長時,可以使用set命令指定一段指令碼。

set -x      ###開啟除錯模式###

case $i in

+)jia

echo "$a + $b = $he"

;;-)jian

echo "$a - $b = $cha"

;;x)cheng

echo "$a x $b = $ji"

;;/)chu

echo "$a / $b = $sahng"

;;*) echo '請輸入正確的運算符號'

esac

set +x ###關閉除錯模式###

sed是文字處理工具,依賴於正規表示式,可以讀取文字內容,根據指定條件對資料進行新增、刪除、替換等操作,被廣泛應用於shell指令碼,以完成自動化處理任務。

命令語法:

常用選項:

常見操作

指令作用

p輸出指定的行

d刪除指定的行

s字串替換,格式: 「行範圍s/ 舊字串 / 新字串 /g」

r讀取指定檔案 使用率低

w儲存為檔案 使用率低

i插入,在當前行前面插入一行或多行

輸出指定的行

將所有內容輸出

sed -n 'p' /etc/passwd

將第6行內容輸出

sed -n '6p' /etc/passwd

將第6~8行內容輸出

sed -n '6, 8p' /etc/passwd

將所有奇數行輸出

sed -n 'p;n' /etc/passwd

將所有偶數行輸出

sed -n 'n;p' /etc/passwd

將1~10行中的奇數行輸出

sed -n '1,10p;n' /etc/passwd

將1~10行中的偶數行輸出

sed -n '1,10' /etc/passwd

將第10行到末尾之間的奇數行輸出

sed -n '10,$' /etc/passwd

將最後一行輸出

sed -n '$p' /etc/passwd

將第1行開始, 連續4行進行輸出(1~5行).

sed -n '1,+4p' /etc/passwd

將匹配包含root的行進行輸出

sed -n '/root/p' /etc/passwd

將從第10行至第乙個包含nom之間的行進行輸出

sed -n '10,/nom/p' /etc/passwd

匹配不少於1次前導字元o, 加-r引數:支援拓展正規表示式.

sed -nr '/rot/p' /etc/passwd

輸出包含root或者ntp的行

sed -n '/root\|ntp/p' /etc/passwd

將包含nom所在的行行號輸出, 「=」號用來輸出行號.

sed -n '/nom/=' /etc/passwd

輸出前5行資訊後退出, q退出.

sed -e '5q' /etc/passwd

插入符合條件的行

新增多行資料, 除最後一行外, 每行末尾都需要用」\n」符號表示資料未完結, 換行.

在含有root行的前面一行新增admin:x:490:490:/sbin nologin

sed'/root/i admin:x:490:490::/:/sbin/nologin' /etc/passwd

在含有root行的後面一行新增admin:x:490:490:/sbin nologin

sed'/root/a admin:x:490:490::/:/sbin/nologin' /etc/passwd

在第3行之後插入admin

sed'3aadmin' /etc/passwd

刪除符合要求的行

刪除第1行

sed'1d' /etc/passwd

刪除最後1行

sed'$d' /etc/passwd

刪除所有空行

sed'/^$/d' /etc/passwd

刪除第2-4行

sed'2,4d' /etc/passwd

刪除含有root的行

sed'/root/d' /etc/passwd

刪除不包含root的行, 這裡的」!」號表示取反操作.

sed'/root/!d' /etc/passwd

刪除以root開頭的行

sed'/^root/d' /etc/passwd

刪除以nologin結尾的行

sed'/nologin$/d' /etc/passwd

替換符號條件的文字

將檔案中所有的root都刪除

sed's/root//g' /etc/passwd

將含有root的行替換為admin:x:490:490:/sbin/nlogin

sed'/root/c admin:x:490:490::/:/sbin/nologin' /etc/passwd

把每行的第2個root替換成admin

sed -n 's/root/admin/2p' /etc/passwd

將包含root的所有行中的root都替換為root

sed'/root/s/root/root/g' /etc/passwd

將第1~3行中的所有bin都替換為bin

sed'1,3s/bin/bin/g' /etc/passwd/

在每行行尾插入字串abc

sed's/$/abc/' /etc/passwd

在每行行首插入#號

sed's/^/#/' /etc/passwd

將包含root的行的行首插入#號

sed'/root/s/^/#/' /etc/passwd

將第一行替換為abc

sed'1cabc' /etc/passwd

將root對應替換為root, y表示對應替換.

sed'y/root/root/' /etc/passwd

將第1~10行中的root對應替換為root

sed'1,10y/root/root/' /etc/passwd

遷移符號條件的文字

h表示儲存當前模式到乙個緩衝區, g表示取出儲存的模式.

將包含root的行另存為檔案filel

sed'/root/w file1' /etc/passwd

將包含root的行遷移至末尾

sed'/root/;$g' /etc/passwd

將第1~5行內容遷移至末尾

sed'1,5;$g' /etc/passwd

將包含root的行遷移至末尾

sed'/root/;$g' /etc/passwd

執行多次命令

-e可以將多個命令連線起來, 也可將多個編輯命令儲存到檔案中, 通過-f指定檔案, 已完成多個處理操作.

將root和bash行作替換

sed -ne 's/root/admin/' -ne 's/bash/sh/p' /etc/passwd

直接修改檔案內容

在每行開頭插入#號, 直接修改原檔案.

sed -i 's/^/#/' /etc/passwad

將每行開頭的#號刪除, 直接修改原檔案.

sed -i 's/^#//g' /etcpasswd

Shell 指令碼除錯

除錯功能是每一門程式語言都應該實現的重要特性,每個系統程式設計師都應該了解bash的除錯選項 1.使用選項 x,啟動shell指令碼的跟蹤除錯功能,將執行的每一條命令和輸出的結果輸出 test.sh檔案 bin bash foriin do echo i done echo script execu...

除錯shell指令碼

遇見莫名其妙的錯誤,先dos2uinux指令碼。echo命令是最有用的除錯指令碼工具之一。一般在可能出現問題的指令碼前後加入echo命令 使用bash命令引數進行除錯 引數 n 不會執行該指令碼,僅查詢指令碼語法是否有問題,並給出錯誤提示。v 在執行指令碼時,先將指令碼的內容輸出到螢幕上然後執行指令...

shell 指令碼除錯

發表於 2016 4 27 0 03 30 1693 人閱讀 分類 shell 除錯功能是每一門程式語言都應該實現的重要特性,每個系統程式設計師都應該了解bash的除錯選項 1.使用選項 x,啟動shell指令碼的跟蹤除錯功能,將執行的每一條命令和輸出的結果輸出 test.sh檔案 bin bash...