亚洲成a人片在线观看www_二区免费视频_免费在线观看毛片_国产精品www爽爽爽视频_国产一区av在线_区美毛片

中國(guó)專(zhuān)業(yè)IT外包服務(wù)

用心服務(wù)每一天
IT之道-艾銻知道

您當(dāng)前位置: 主頁(yè) > 資訊動(dòng)態(tài) > 艾銻分享 >

服務(wù)器維護(hù)Shell腳本基礎(chǔ)知識(shí)與重定向與管道操作


2020-07-02 19:22 作者:admin

服務(wù)器維護(hù)Shell腳本基礎(chǔ)知識(shí)與重定向與管道操作

服務(wù)器維護(hù)小知識(shí)

一、Shell腳本基礎(chǔ)

服務(wù)器維護(hù)小知識(shí)Linux系統(tǒng)中的Shell腳本是一個(gè)特殊的應(yīng)用程序,它介于操作系統(tǒng)內(nèi)核與用戶(hù)之間,充當(dāng)了一個(gè)“命令解釋器”的角色,負(fù)責(zé)接收用戶(hù)輸入的操作命令并進(jìn)行解釋?zhuān)瑢⑿枰獔?zhí)行的操作傳遞給內(nèi)核執(zhí)行,并輸出執(zhí)行結(jié)果。

服務(wù)器維護(hù)小知識(shí)1、簡(jiǎn)單編寫(xiě)Shell腳本

[root@CentOS01 ~]# vim aaa.sh    <!--新建aaa.sh文件-->
#!/bin/bash
#Description E-Mail:2807489749@qq.com BY:LYX
cd /boot/
echo "顯示當(dāng)前目錄:"
pwd
echo "查看以vml開(kāi)頭的文件:"
ls -lh vml*
[root@centos01 ~]# chmod +x aaa.sh     <!--添加可執(zhí)行權(quán)限-->
上述aaa.sh腳本文件中,第一行“#!/bin/bash”是一行特殊的腳本聲明,表示此行以后的語(yǔ)句通過(guò)/bin/bash程序來(lái)解釋執(zhí)行;其他以“#”開(kāi)頭的語(yǔ)句表示注釋信息;echo命令用于輸出字符串,以使腳本的輸出信息更容易讀懂。上述配置包括三條命令:cd /boot/、pwd、ls -lh vml*。執(zhí)行此腳本文件后,輸出結(jié)果與依次單獨(dú)執(zhí)行這三條命令是相同的,從而實(shí)現(xiàn)了“批量處理”的自動(dòng)化過(guò)程。
通過(guò)“./aaa.sh”的方式執(zhí)行腳本,執(zhí)行之前必須授權(quán)于文件的X權(quán)限。
[root@centos01 ~]# ./aaa.sh    <!--運(yùn)行腳本文件-->
/boot
-rwxr-xr-x. 1 root root 5.7M 10月 23 22:35 vmlinuz-0-rescue-2b580d1a2e8348b8aa9f78be11137b41
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64
[root@centos01 ~]# source aaa.sh  <!--通過(guò)source來(lái)解釋腳本-->
[root@centos01 ~]# sh aaa.sh     <!--通過(guò)/bin/sh來(lái)解釋腳本-->

二、重定向與管道操作

服務(wù)器維護(hù)小知識(shí)1、重定向輸出

表示將命令的正常輸出結(jié)果保存到指定的文件中,并覆蓋文件中的原有內(nèi)容,若文件不存在,則會(huì)新建一個(gè)文件使用 “>”操作符號(hào)。
表示將命令的正常輸出結(jié)果追加到指定的文件中sh使用“>>”操作符號(hào)。
舉個(gè)例子:
[root@centos01 ~]# echo "aaa"  <!--數(shù)據(jù)輸出到顯示器上顯示-->
aaa
[root@centos01 ~]# echo "aaa" > 1.txt    <!--將數(shù)據(jù)輸出到文件中-->
[root@centos01 ~]# cat 1.txt      <!--查看文件中數(shù)據(jù)-->
aaa
[root@centos01 ~]# echo "bbb" >> 1.txt      <!--將數(shù)據(jù)追加輸出到1.txt文件中-->
[root@centos01 ~]# cat 1.txt         <!--查看文件-->
aaa
bbb

服務(wù)器維護(hù)小知識(shí)2、重定向輸入

重定向輸入指的是將命令中接收輸入的途徑由默認(rèn)的鍵盤(pán)改為指定的文件,而不是等待從鍵盤(pán)輸入。重定向輸入使用“<”操作符。
舉個(gè)例子:
使用passwd命令為用戶(hù)設(shè)置密碼時(shí),每次都必須根據(jù)提示輸入兩次密碼字串,非常繁瑣,若改用重定向輸入將可以省略交互式的過(guò)程,而自動(dòng)完成密碼設(shè)置。
[root@centos01 ~]# useradd bob  <!--創(chuàng)建bob用戶(hù)-->
[root@centos01 ~]# vim password.txt     <!--添加初始密碼串-->
pwd@123                    <!--密碼為pwd@123-->
[root@centos01 ~]# passwd --stdin bob < password.txt      <!--從password.txt文件中取密碼-->
更改用戶(hù) bob 的密碼 。
passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。

服務(wù)器維護(hù)小知識(shí)3、錯(cuò)誤重定向

錯(cuò)誤重定向指的是將執(zhí)行命令過(guò)程中出現(xiàn)的錯(cuò)誤信息(如選項(xiàng)或參數(shù)錯(cuò)誤等)保存到指定的文件,而不是直接顯示在屏幕上。錯(cuò)誤重定向使用 “2>”操作符,其中“2”是指錯(cuò)誤文件的編號(hào)(在使用標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)輸入重定向時(shí),實(shí)際上省略了1、0編號(hào))。
舉個(gè)例子:
執(zhí)行以下操作可以將使用tar命令進(jìn)行備份時(shí)出現(xiàn)的錯(cuò)誤信息保存到3.txt文件中。
[root@centos01 ~]# tar jcf /nonedir/etc.tgz /etc/ 2> 3.txt
[root@centos01 ~]#
[root@centos01 ~]# cat 3.txt
tar: 從成員名中刪除開(kāi)頭的“/”
tar (child): /nonedir/etc.tgz:無(wú)法 open: 沒(méi)有那個(gè)文件或目錄
tar (child): Error is not recoverable: exiting now
使用“2>”操作符時(shí),會(huì)像使用“>”操作符一樣覆蓋目標(biāo)文件的內(nèi)容,若要追加內(nèi)容而不是覆蓋文件,則應(yīng)改用“2>>”操作符。
當(dāng)命令輸出的結(jié)果可能即包括標(biāo)準(zhǔn)輸出(正常執(zhí)行)信息,又包括錯(cuò)誤輸出信息時(shí),可以使用操作符“>” “2>”將兩類(lèi)輸出信息分別保存到不同的文件,也可以使用“&>”操作符兩兩類(lèi)輸出信息保存到同一個(gè)文件。
舉個(gè)例子:
[root@centos01 ~]# vim httpd.sh   <!--新建httpd.sh文件-->
#!/bin/bash
#自動(dòng)編譯安裝httpd服務(wù)器
cd /usr/src/httpd-2.2.17/
echo "1.配置Apache服務(wù):"
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &> /dev/null
echo "2.編譯Apache服務(wù):"
make &> /dev/null
echo "3.安裝Apache服務(wù):"
make install &> /dev/null
[root@centos01 ~]# chmod +x httpd.sh   <!--添加X(jué)權(quán)限-->
[root@centos01 ~]# ./httpd.sh     <!--運(yùn)行腳本文件-->
1.配置Apache服務(wù):
2.編譯Apache服務(wù):
3.安裝Apache服務(wù):

服務(wù)器維護(hù)小知識(shí)4、管道操作

管道(pipe)操作為不同命令之間的協(xié)同工作提供了一種機(jī)制,位于管道符號(hào)“|”左側(cè)的命令輸出的結(jié)果,將作為右側(cè)命令的輸入(處理對(duì)象),同一行命令中可以使用多個(gè)管道。
舉個(gè)例子:
[root@centos01 ~]# grep "/bin/bash$" /etc/passwd  <!--提取前-->
root:x:0:0:root:/root:/bin/bash
test:x:1000:1000:test:/home/test:/bin/bash
bob:x:1002:1002::/home/bob:/bin/bash
[root@centos01 ~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'   <!--提取后-->
root /bin/bash
test /bin/bash
bob /bin/bash
[root@centos01 ~]# df -hT     <!--提取之前-->
文件系統(tǒng)       類(lèi)型      容量  已用  可用 已用% 掛載點(diǎn)
/dev/sda3      xfs        76G  5.2G   71G    7% /
devtmpfs       devtmpfs  474M     0  474M    0% /dev
tmpfs          tmpfs     489M     0  489M    0% /dev/shm
tmpfs          tmpfs     489M  6.9M  482M    2% /run
tmpfs          tmpfs     489M     0  489M    0% /sys/fs/cgroup
/dev/sda1      xfs       197M  136M   61M   70% /boot
tmpfs          tmpfs      98M     0   98M    0% /run/user/0
/dev/sr0       iso9660   664M  664M     0  100% /mnt
[root@centos01 ~]# df -hT | grep "/$" |awk '{print $6}'   <!--提取之后其中g(shù)rep “/$”表示提取以“/”結(jié)尾的行-->
7%
上述中awk命令的作用是以冒號(hào)“:”作為分隔,輸出第1個(gè),第7個(gè)區(qū)域的字符串。其中的“-F”部分用來(lái)指定分割符號(hào)(未指定時(shí),默認(rèn)以空格或制表符分隔)。

三、使用Shell變量

各種Shell環(huán)境中都使用到了“變量”的概念。Shell變量用來(lái)存放系統(tǒng)和用戶(hù)需要使用的特定參數(shù)(值),而且這些參數(shù)可以根據(jù)用戶(hù)的設(shè)定或系統(tǒng)環(huán)境的變化而相應(yīng)變化。通過(guò)使用變量,Shell程序能夠提供更加靈活的功能,適應(yīng)性更強(qiáng)。
常見(jiàn)Shell變量的類(lèi)型包括自定義變量、環(huán)境變量、位置變量、預(yù)定義變量。

服務(wù)器維護(hù)小知識(shí)1、自定義變量

自定義變量是由系統(tǒng)用戶(hù)自己定義的變量,只在用戶(hù)自己的Shell環(huán)境中有效,因此又稱(chēng)為本地變量。在編寫(xiě)Shell腳本程序時(shí),通常會(huì)設(shè)置一些特定的自定義變量,以適應(yīng)程序執(zhí)行過(guò)程中的各種變化,滿足不同的需求。

1)定義新的變量

定義變量的基本格式為“變量名=變量值”,等號(hào)兩邊沒(méi)有空格。變量名稱(chēng)需以字母或下劃線開(kāi)頭,名稱(chēng)中不要包含特殊字符(如+、-、*、/、?、%、&、#等)。
[root@centos01 ~]# li=Python
[root@centos01 ~]# version=2.7.13

2)查看和引用變量的值

通過(guò)在變量名稱(chēng)前添加前導(dǎo)符號(hào)“$”,可以引用一個(gè)變量的值。使用echo命令可以查看變量,可以在一條echo命令中同時(shí)查看多個(gè)變量值。
[root@centos01 ~]# echo $li
python
[root@centos01 ~]# echo $version
2.7.13
[root@centos01 ~]# echo $li $version
python 2.7.13

3)變量賦值的特殊操作

在等號(hào)“=”后邊直接指定變量?jī)?nèi)容是為變量賦值的最基本方法,除此之外,還有一些特殊的賦值操作,可以更靈活地位變量賦值,以便適用于各種復(fù)雜的管理任務(wù)。

雙引號(hào)(" ")

[root@centos01 ~]# PYTHON=python 2.7.13  <!--錯(cuò)誤賦值-->
bash: 2.7.13: 未找到命令...
[root@centos01 ~]# PYTHON="python 2.7.13" <!--正確的賦值-->
[root@centos01 ~]# echo $PYTHON   <!--查看值-->
python 2.7.13
在雙引號(hào)范圍內(nèi),使用“$”符號(hào)可以引用其他變量的值(變量引用),從而能夠直接調(diào)用現(xiàn)有變量的值來(lái)賦給新的變量。
[root@centos01 ~]# echo $version
2.7.13
[root@centos01 ~]# sqlserver="sqlserver $version"
                                       <!--以變量的值進(jìn)行賦值-->
[root@centos01 ~]# echo $sqlserver    <!--查看值-->
sqlserver 2.7.13

單引號(hào)(' ')

當(dāng)要賦值的內(nèi)容中包含$、“、\等具有特殊含義的字符時(shí),應(yīng)使用單引號(hào)括起來(lái)。在單引號(hào)的范圍內(nèi),將無(wú)法引用其他變量的值,任何字符均作為普通字符看待。
[root@centos01 ~]# sqlserver='sqlserver $version'  <!--$符號(hào)不能再引用變量-->
[root@centos01 ~]# echo $sqlserver      <!--原樣輸出字符串-->
sqlserver $version

反撇號(hào)(`)

反撇號(hào)主要用于命令替換,允許將執(zhí)行某個(gè)命令的屏幕輸出結(jié)果賦值給變量。反撇號(hào)括起來(lái)的范圍必須能夠執(zhí)行的命令行,否則將會(huì)出錯(cuò)。
[root@centos01 ~]# ls -lh `which useradd`
-rwxr-x---. 1 root root 116K 11月  6 2016 /usr/sbin/useradd
上述操作相當(dāng)于連續(xù)執(zhí)行了兩條命令——先通過(guò)which useradd命令查找出useradd命令的程序位置,然后根據(jù)查找結(jié)果列出文件屬性。執(zhí)行過(guò)程中,會(huì)用which useradd命令的輸出結(jié)果替換整個(gè)反撇號(hào)范圍。

read命令

除了上述賦值操作以外,還可以使用bash的內(nèi)置命令read來(lái)給變量賦值。read命令用來(lái)提示用戶(hù)輸入信息,從而實(shí)現(xiàn)簡(jiǎn)單的交互過(guò)程。執(zhí)行時(shí)將從標(biāo)準(zhǔn)輸入設(shè)備(鍵盤(pán))讀入一行內(nèi)容,并以空格為分隔符,將讀入的各字段依次賦值給指定的變量(多余的內(nèi)容賦值給最后一個(gè)變量)。若指定的變量只有一個(gè),則將整行內(nèi)容賦值給此變量。
[root@centos01 ~]# read -p "輸入需要的內(nèi)容:" insert
輸入需要的內(nèi)容:您好!  <!--將您好!賦值給變量insert-->
[root@centos01 ~]# echo $insert
您好!

4)設(shè)置變量的作用范圍

默認(rèn)情況下,新定義的變量只在當(dāng)前的Shell環(huán)境中有效,因此稱(chēng)為局部變量。當(dāng)進(jìn)入子程序或新的子Shell環(huán)境時(shí),局部變量將無(wú)法再使用。例如,直接執(zhí)行Bash進(jìn)入一個(gè)新的子Shell腳本后,將無(wú)法引用父級(jí)Shell環(huán)境中定義的li、version等變量。
[root@centos01 ~]# echo "$li $version"   <!--查看當(dāng)前定義的變量值-->
python 2.7.13
[root@centos01 ~]# bash            <!--進(jìn)入子shell環(huán)境-->
[root@centos01 ~]# echo "$li $version"        <!--無(wú)法調(diào)用父shell環(huán)境中的變量-->
[root@centos01 ~]# exit        <!--返回原有的shell環(huán)境-->
exit
[root@centos01 ~]# echo "$li $version"   <!--查看當(dāng)前定義的變量值-->
[root@centos01 ~]# export li version     <!--設(shè)置為全局變量-->
[root@centos01 ~]# bash          <!--進(jìn)入子shell環(huán)境-->
[root@centos01 ~]# echo "$li $version" <!--可以調(diào)用父shell的全局變量-->
python 2.7.13
[root@centos01 ~]# exit     <!--返回原有的shell環(huán)境-->
exit

5)數(shù)值變量的運(yùn)算

Shell變量的數(shù)值運(yùn)算多用于腳本程序的過(guò)程控制(如循環(huán)次數(shù)、使用量比較等)再Bash shell環(huán)境中,只能進(jìn)行簡(jiǎn)單的證書(shū)運(yùn)算,不支持小數(shù)運(yùn)算。整數(shù)值的運(yùn)算主要通過(guò)內(nèi)部命令expr進(jìn)行,基本格式如下:
expr 變量1 運(yùn)算符 變量2 [運(yùn)算符 變量3]...
其中,變量1、變量2......對(duì)應(yīng)為需要計(jì)算的數(shù)值變量(需要以“$”符號(hào)調(diào)用),常用的幾種運(yùn)算符如下所述
+:加法運(yùn)算;
-:減法運(yùn)算;
*:乘法運(yùn)算;注意不能僅使用“*”符號(hào),否則將被當(dāng)成文件通配符;
/:除法運(yùn)算;
%:求模運(yùn)算,又稱(chēng)為取余運(yùn)算,用來(lái)計(jì)算數(shù)值相除后的余數(shù);
舉個(gè)例子:
[root@centos01 ~]# x=35
[root@centos01 ~]# y=16
[root@centos01 ~]# expr $x + $y
51
[root@centos01 ~]# expr $x - $y
19
[root@centos01 ~]# expr $x \* $y
560
[root@centos01 ~]# expr $x / $y
2
[root@centos01 ~]# expr $x % $y
3

服務(wù)器維護(hù)小知識(shí)2、特殊的shell變量

1)環(huán)境變量:

使用命令“env”可以查看到當(dāng)前工作環(huán)境下的環(huán)境變量。環(huán)境變量的值由Linux系統(tǒng)自動(dòng)維護(hù),會(huì)隨著用戶(hù)狀態(tài)的改變而改變。
其中PATH變量用于設(shè)置可執(zhí)行程序的默認(rèn)搜索路徑,如將root目錄添加到默認(rèn)搜索路徑:PATH="$PATH:/root"如果找不到則會(huì)提示“command not found”
環(huán)境變量的全局配置文件為:/etc/profile,在此文件中定義的變量作用于所有用戶(hù)。
用戶(hù)獨(dú)立配置未見(jiàn)位于:~/.bash_profile
修改變量文件后,須使用source命令重新讀取加載或重啟才會(huì)生效。

2)位置變量:

位置變量也稱(chēng)位置參數(shù),在命令 “ls -lh /boot” 中,ls的位置變量為$0,-lh的位置變量為$1,/boot的位置變量為$2。以此類(lèi)推。

3)預(yù)定義變量:

預(yù)定義變量是由bash程序預(yù)先定義好的一類(lèi)特殊變量,用戶(hù)只能使用預(yù)定義變量,而不能創(chuàng)建新的預(yù)定義變量,也不能直接為預(yù)定義變量賦值。預(yù)定義變量使用“$”符號(hào)和另一個(gè)符號(hào)組合表示,經(jīng)常用的幾個(gè)預(yù)定義變量含義如下:
· $#:表示命令行中位置參數(shù)的個(gè)數(shù)。
· $*:表示所有位置參數(shù)的內(nèi)容。
· $?:表示前一條命令執(zhí)行后返回的狀態(tài),返回0表示執(zhí)行正確,返回任何非0的數(shù)值表示執(zhí)行出現(xiàn)異常。
· $0:表示當(dāng)前執(zhí)行的腳本或程序的名稱(chēng)。
IT運(yùn)維  我們選擇北京艾銻無(wú)限
以上文章由北京艾銻無(wú)限科技發(fā)展有限公司整理



相關(guān)文章

IT外包服務(wù)
二維碼 關(guān)閉
主站蜘蛛池模板: 中文字幕亚洲综合久久菠萝蜜 | 国产一区二区三区四区五区在线 | 国产精品日韩在线观看一区二区 | 国产成人免费看 | 免费高清欧美一区二区三区 | 曰韩亚洲av人人夜夜澡人人爽 | 免费看的一级毛片 | 国产最新进精品视频 | 亚洲av片在线观看网址 | 久久久免费毛片 | 在线观看免费av的网址 | 国户精品久久久久久久久久久不卡 | 色翁荡熄又大又硬又粗又视频 | av免费在线网站 | 中文字幕久久久久一区 | 99久久久久久99国产精品免 | 波多野结衣好大好紧好爽 | 在线观看成年人免费视频 | 粉嫩av国产一区二区三区 | 人人干日日 | 18禁黄无遮挡网站免费高清 | 日本拍拍免费观看片成人 | 久热九九| 夜夜爽99久久国产综合精品女不卡 | 偷偷操不一样的久久 | 看一级黄色片子 | 91福利国产在线观看 | c国产又粗又猛又爽又黄的视频站 | 日产精品一线二线三线区 | 国产欧美动漫精品一区 | 国产精品美女乱子伦高潮 | 欧美久久久 | 亚洲国产二区 | 超碰91人人草人人干 | 国产精品久久久久久久久小说 | 不卡无在线一区二区三区 | 泰国free性video极品 | a级高清免费毛片 | 欧美无毛逼 | 在线观看国产h小视频 | 久久密一区二区三区 |