Shell程序分類
Shell程序有很多, 如Korn shell(ksh)、Bourne Again shell(bash)、C shell(包括csh與tcsh)
等等,
各主要操作系統(tǒng)下缺省的shell:
- AIX下是
Korn Shell
- Solaris缺省的是
Bourne shell
- FreeBSD缺省的是
C shell
- HP-UX缺省的是
POSIX shell
- Linux缺省的是
Bourne Again shell
1、系統(tǒng)中sh命令是bash的軟鏈接
sh=bash
file /usr/bin/sh
sh --version
/usr/bin/bash --version
whereis sh
但這種在命令行中的命令是即時(shí)輸出結(jié)果的,不能重復(fù)使用(重復(fù)輸入可以重復(fù)使用,但如果是要多行輸入的命令則極不方便),要想方便重復(fù)使用同一個(gè)功能就把多行的命令放到一個(gè)標(biāo)準(zhǔn)格式的文件中,這就是shell編程了。
所以所謂shell編程就是一行或多行不同功能的shell命令的集合!這個(gè)shell命令集合的文件叫shell script(shell腳本)。
2、Shell腳本標(biāo)準(zhǔn)格式之文件后綴
Shell腳本文件一般是以.sh為后綴,如下圖顯示的文件fin是系統(tǒng)上默認(rèn)存在的shell腳本文件
find /-name *.sh
3、Shell腳本標(biāo)準(zhǔn)格式之文件內(nèi)容首行
首行通常是#!/bin/sh
或#!/bin/bash
或#!/usr/bin/sh或#!/usr/bin/bash
開(kāi)頭(或者你還會(huì)看到其它的路徑,或者全部有之)。該行的意思是,它告訴系統(tǒng)這個(gè)腳本需要什么解釋器(即是什么shell,本系統(tǒng)是bash)來(lái)執(zhí)行。
從第二行開(kāi)始,凡是以#開(kāi)頭的行,說(shuō)明該行均不會(huì)被執(zhí)行,多用來(lái)作注釋、說(shuō)明。
注意:是以行為單位的。
到不是#開(kāi)頭的行開(kāi)始,才是有效的命令、代碼。
因篇幅原因,本截圖省了后面很多內(nèi)容,請(qǐng)自行在系統(tǒng)上查看該文件完整內(nèi)容。
4、Shell腳本的運(yùn)行方法
一、作為可執(zhí)行程序
#!/bin/sh
ip addr | grep -v 127.0.0.1 | grep -v inet6 | grep inet | awk '{print $2}' | cut -d / -f 1
解釋
這段Shell腳本的作用是獲取本機(jī)的IPv4地址,并將其輸出。
讓我來(lái)一步一步解釋這段腳本的具體內(nèi)容:
-
#!/bin/sh
:這是一個(gè)shebang(也稱為hashbang),用于指定腳本使用哪個(gè)解釋器來(lái)執(zhí)行。在這里,#!/bin/sh
表示腳本將使用默認(rèn)的shell解釋器來(lái)執(zhí)行,通常是Bash或類似的shell。 -
ip addr
:這個(gè)命令用于獲取關(guān)于網(wǎng)絡(luò)接口的信息,包括IP地址和其他網(wǎng)絡(luò)配置。 -
grep -v 127.0.0.1
:這個(gè)命令用于過(guò)濾掉IP地址中包含127.0.0.1
的行,即過(guò)濾掉環(huán)回地址。 -
grep -v inet6
:這個(gè)命令用于過(guò)濾掉IP地址中包含inet6
的行,即過(guò)濾掉IPv6地址。 -
grep inet
:這個(gè)命令用于篩選出包含inet
(IPv4地址)的行。 -
awk '{print $2}'
:這個(gè)命令使用awk來(lái)提取每一行的第二個(gè)字段(IPv4地址),并進(jìn)行打印輸出。 -
cut -d / -f 1
:這個(gè)命令使用cut來(lái)根據(jù)/
進(jìn)行分隔,提取分隔后的第一個(gè)字段(IPv4地址的主機(jī)部分),并進(jìn)行打印輸出。
綜合起來(lái),這個(gè)腳本的作用是獲取本機(jī)的IPv4地址(除了本地回環(huán)地址和IPv6地址),并將其輸出。
請(qǐng)注意,這段腳本在Linux環(huán)境下執(zhí)行,可能需要確保你的系統(tǒng)中已經(jīng)安裝了所需的命令(如ip、grep、awk、cut)。
將上面內(nèi)容保存了/root
目錄下的showip.sh
文件中,并cd到/root目錄下。
chmod +x ./showip.sh #使腳本具有執(zhí)行權(quán)限
./showip.sh #執(zhí)行腳本
二、作為解釋器(bash)參數(shù)
本系統(tǒng)的解釋器(shell)是bash,而我們知道sh是bash的軟連接(類似于windows下的快捷方式),則最常用的方法就是“sh 腳本文件名”。
- 后面兩種,只是故意演示出來(lái)而已。請(qǐng)使用上面的方法。理由是:輸入少因而效率高。
- 我們知道sh是命令,而命令后面跟的就叫該命令參數(shù)。所以本方法叫“作為解釋器的參數(shù)”運(yùn)行腳本。
- 而該方法運(yùn)行腳本,會(huì)無(wú)視腳本內(nèi)的首行(即首行寫(xiě)與不寫(xiě)都沒(méi)關(guān)系)。為什么?! 因?yàn)橹苯诱{(diào)用了解釋器!
5、find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk的常用命令
當(dāng)涉及到文本處理和數(shù)據(jù)操作時(shí),下面是一些find
、grep
、xargs
、sort
、uniq
、tr
、cut
、paste
、wc
、sed
和awk
的常用命令:
1. find:用于在文件系統(tǒng)中搜索文件或目錄。
-
find /path/to/directory -name "filename"
:按照文件名在指定目錄下搜索文件。 -
find /path/to/directory -type f
:找出指定目錄下的所有文件。 -
find /path/to/directory -type d
:找出指定目錄下的所有目錄。
2. grep:用于在文件或輸入中查找特定模式。
-
grep "pattern" file.txt
:在文件中搜索包含指定模式的行。 -
cat file.txt | grep "pattern"
:在輸入流中搜索包含指定模式的行。
3. xargs:用于從標(biāo)準(zhǔn)輸入中讀取參數(shù)并將其傳遞給其他命令。
-
find /path/to/directory -name "*.txt" | xargs rm
:找到所有以.txt
結(jié)尾的文件并刪除它們。 -
find /path/to/directory -name "*.txt" | xargs cat
:找到所有以.txt
結(jié)尾的文件并查看它們。
4. sort:用于對(duì)文本進(jìn)行排序。
-
sort file.txt
:對(duì)文件中的行按字母順序進(jìn)行排序。 -
sort -n file.txt
:對(duì)文件中的行按數(shù)值大小進(jìn)行排序。
5. uniq:用于從排序后的輸入中篩選出唯一的行。
-
sort file.txt | uniq
:對(duì)文件中的行排序并消除重復(fù)行。 -
sort file.txt | uniq -c
:計(jì)算每個(gè)唯一行的出現(xiàn)次數(shù)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-514263.html
6. tr:用于字符替換和刪除。
-
cat file.txt | tr 'a' 'b'
:將輸入中的所有字母 ‘a(chǎn)’ 替換為 ‘b’。 -
cat file.txt | tr -d 'a'
:刪除輸入中的所有字母 ‘a(chǎn)’。
7. cut:用于從文本中提取指定字段。
-
cut -d ',' -f 1,3 file.csv
:以逗號(hào)為分隔符,提取CSV文件中的第1和第3個(gè)字段。
8. paste:用于將多個(gè)文件的內(nèi)容合并為一行。
-
paste file1.txt file2.txt
:將兩個(gè)文件的內(nèi)容并排合并。
9. wc:用于計(jì)算文件或文本的行數(shù)、字?jǐn)?shù)和字符數(shù)。
-
wc -l file.txt
:計(jì)算文件中的行數(shù)。 -
echo "Hello, World!" | wc -w
:計(jì)算輸入內(nèi)容的字?jǐn)?shù)。
10. sed:用于流式文本編輯。
-
sed 's/pattern/replacement/g' file.txt
:將文件中的所有匹配pattern
的內(nèi)容替換為replacement
。 -
sed '/pattern/d' file.txt
:從文件中刪除包含pattern
的行。
11. awk:用于處理結(jié)構(gòu)化文本數(shù)據(jù)。
-
awk '{print $1}' file.txt
:打印文件中每一行的第一個(gè)字段。 -
awk -F ',' '{print NF}' file.csv
:計(jì)算文件中每一行的字段數(shù)。
以上只是這些命令中的一些常見(jiàn)用法示例,它們具有更多強(qiáng)大和靈活的功能。你可以查閱命令的文檔或在終端上運(yùn)行 man <command>
來(lái)了解更多詳細(xì)的用法和選項(xiàng)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-514263.html
到了這里,關(guān)于【運(yùn)維工程師學(xué)習(xí)三】Linux中Shell腳本編寫(xiě)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!