Linux云計算架構(gòu)師:expect-正則表達式-sed-cut的使用

全套學習資料移步至公眾號【學神來啦】

本節(jié)所講內(nèi)容:

23.1 ?expect實現(xiàn)無交互登錄

23.2 ?正則表達式

23.3 ?sed流編輯器

23.4 ?cut命令

23.5 ?實戰(zhàn)-bash腳本語法檢查和查看詳細的執(zhí)行過程

23.1 ?expect實現(xiàn)無交互登錄

expect ([?k?spekt]??期待 )是從它發(fā)展出來的。如果你想要寫一個能夠自動處理輸入輸出的腳本(如向用戶提問并且驗證密碼)又不想面對C或者Perl,那么expect是你的最好的選擇夸浅。它可以用來做一些linux下無法做到交互的一些命令操作

安裝和使用expect

[root@xuegod63 ~]# yum -y install expect

使用expect創(chuàng)建腳本的方法

1)定義腳本執(zhí)行的shell

#!/usr/bin/expect?

這里定義的是expect可執(zhí)行文件的鏈接路徑(或真實路徑)统台,功能類似于bash等shell功能

2)set timeout 30

設置超時時間便瑟,單位是秒,如果設為timeout -1 意為永不超時

3)spawn

spawn 是進入expect環(huán)境后才能執(zhí)行的內(nèi)部命令,如果沒有裝expect或者直接在默認的SHELL下執(zhí)行是找不到spawn命令的预鬓。不能直接在默認的shell環(huán)境中進行執(zhí)行主要功能,它主要的功能是給ssh運行進程加個殼赊颠,?用來傳遞交互指令格二。

4)expect

這里的expect同樣是expect的內(nèi)部命令

主要功能:判斷輸出結(jié)果是否包含某項字符串,沒有則立即返回竣蹦,否則就等待一段時間后返回蟋定,等待時間通過timeout進行設置

5)send

執(zhí)行交互動作,將交互要執(zhí)行的動作進行輸入給交互指令

命令字符串結(jié)尾要加上"\r"草添,如果出現(xiàn)異常等待的狀態(tài)可以進行核查

6)exp_continue

繼續(xù)執(zhí)行接下來的交互操作

7)interact

執(zhí)行完后保持交互狀態(tài)驶兜,把控制權(quán)交給控制臺;如果不加這一項远寸,交互完成會自動退出

8)$argv

expect 腳本可以接受從bash傳遞過來的參數(shù)抄淑,可以使用 [lindex $argv n]獲得,n從0開始驰后,分別表示第一個肆资,第二個,第三個……參數(shù)

例1:免密碼腳本通過SSH登錄服務器 ??

注:運行腳本時灶芝,要把#號后面的注釋刪除郑原,不然無法運行

[root@xuegod63 ~]# vim?ssh.exp

#!/usr/bin/expect

set ipaddr "192.168.100.63"

set name "root"

set passwd "123456"

set timeout 30#設置超時時間,單位是秒夜涕;expect超時等待的時間犯犁。默認timeout為10s。

spawn ssh $name@$ipaddr# spawn是進入expect環(huán)境后才可以執(zhí)行的expect內(nèi)部命令女器,如果沒有裝expect或者直接在shell下執(zhí)行是找不到spawn命令的酸役。這個就好比cd是shell的內(nèi)建命令,離開shell驾胆,就無法執(zhí)行cd一樣涣澡。 它主要的功能是給ssh運行進程加個殼,用來傳遞交互指令丧诺。

expect {

"yes/no" { send "yes\r";exp_continue }

"password" { send "$passwd\r" }#執(zhí)行交互動作入桂,與手工輸入密碼的動作等效。

}

expect "#"#找#這個字符串驳阎,找到就代表root登錄成功了

send "touch /root/xuegod1011.txt\r"

send "ls /etc > /root/xuegod1011.txt\r"

send "mkdir /tmp/xuegod1011\r"

send "exit\r"

expect eof#執(zhí)行完成上述命令后抗愁,退出Expect惕艳,把控制權(quán)交給控制臺,變回手工操作

[root@xuegod63 ~]# expect ssh.exp???#開始執(zhí)行

例2:對服務器批量管理(了解一下)

[root@xuegod63 ~]# vim?ip_pass.txt????#這里寫上要執(zhí)行的IP地址和root用戶密碼

192.168.1.63 ?123456

192.168.1.64 ?123456

192.168.1.65 ?123456

[root@xuegod63 ~]# vim?ssh2.exp???#編寫要執(zhí)行的操作

注:運行腳本時驹愚,要把#號后面的注釋刪除远搪,不然無法運行

#!/usr/bin/expect

set ipaddr [lindex $argv 0]??#接收第一個位置的變量

set passwd [lindex $argv 1] ?#接收第二個位置的變量

set timeout 30

spawn ssh root@$ipaddr

expect {

"yes/no" { send "yes\r";exp_continue }

"password" { send "$passwd\r" }

}

expect "#"

send "touch /root/xuegod1011.txt\r"

send "ls /etc > /root/xuegod1011.txt\r"

send "mkdir /tmp/xuegod1011\r"

send "exit\r"

expect eof

[root@xuegod63 ~]# vim?login.sh

#!/bin/bash

for ip in `awk '{print $1}' /root/ip_pass.txt`

do

pass=`grep $ip /root/ip_pass.txt|awk '{print $2}'` ?#通過grep找到這ip這一行內(nèi)容,然后通過awk找到這一行的第二列

expect /root/ssh2.exp $ip $pass

done

[root@xuegod63 ~]# sh login.sh

23.2 ?正則表達式的使用

正則表達式逢捺,又稱規(guī)則表達式谁鳍。(英語:Regular Expression [?reɡjul?] 規(guī)則的 [?iks?pre??n]?表

達 ),在代碼中常簡寫為regex劫瞳、regexp或RE)倘潜,計算機科學的一個概念。正則表達式通常被用來檢索志于、替換那些符合某個模式(規(guī)則)的文本涮因。

正則表達式不只有一種,而且LINUX中不同的程序可能會使用不同的正則表達式伺绽,如:

工具:grep ??sed ??awk

LINUX中常用的有兩種正則表達式引擎

基礎正則表達式:BRE

擴展正則表達式: ?ERE

Shell正則表達式的組成

基礎正則表達式

特別字符

$? #匹配輸入字符串的結(jié)尾位置养泡。要匹配 $ 字符本身,請使用 \$

( )? #標記一個子表達式的開始和結(jié)束位置奈应。要匹配這些字符澜掩,請使用 \( 和 \)

*? #匹配前面的子表達式零次或多次。要匹配 * 字符杖挣,請使用 \*

+? #匹配前面的子表達式一次或多次肩榕。要匹配 + 字符,請使用 \+

.? #匹配除換行符 \n 之外的任何單字符惩妇。要匹配 . 株汉,請使用 \.

[? #標記一個中括號表達式的開始。要匹配 [歌殃,請使用 \[

?? #匹配前面的子表達式零次或一次乔妈,或指明一個非貪婪限定符。要匹配 ? 字符請使用 \?

\? #將下一個字符標記為或特殊字符挺份、或原義字符褒翰、或向后引用、或八進制轉(zhuǎn)義符匀泊。例如, 'n' 匹配字符 'n'朵你。'\n' 匹配換行符各聘。序列 '\\' 匹配 "\",而 '\(' 則匹配 "("

^? #匹配輸入字符串的開始位置抡医,除非在方括號表達式中使用躲因,此時它表示不接受該字符集合早敬。要匹配 ^ 字符本身,請使用 \^

{? #標記限定符表達式的開始大脉。要匹配 {搞监,請使用 \{

|? #指明兩項之間的一個選擇。如:Y | y镰矿,要匹配 |琐驴,請使用 \| ?

定位符

^? #匹配輸入字符串開始的位置

$? #匹配輸入字符串結(jié)尾的位置

非打印字符

\n? #匹配一個換行符

\r? #匹配一個回車符

\t? #匹配一個制表符

[root@xuegod63 ~]# grep 'ro\+t' /etc/passwd

[root@xuegod63 ~]# egrep 'ro+t' ?/etc/passwd

[root@xuegod63 ~]# egrep 'ro(o)?t' ?/etc/passwd

[root@xuegod63 ~]# grep 'ro\(o\)\?t' /etc/passwd

例:統(tǒng)計/etc/ssh/sshd_config文件中除去空行和#號開頭的行的行數(shù)

[root@xuegod63 ~]# grep -v "^$" /etc/ssh/ssh_config | grep -v "^#" | wc -l

[root@xuegod63 ~]# grep -v "^$\|^#" /etc/ssh/ssh_config | wc -l ??#使用基礎正則表達式

[root@xuegod63 ~]# grep -E -v "^$|^#" /etc/ssh/ssh_config | wc -l #擴展正則表達式

[root@xuegod63 ~]# egrep -v "^$|^#" /etc/ssh/ssh_config ?| wc -l #擴展正則表達式

23.3 ?sed流編輯器

23.3.1 ?sed ?strem editor 流編輯器

sed編輯器是一行一行的處理文件內(nèi)容的。正在處理的內(nèi)容存放在模式空間(緩沖區(qū))內(nèi)秤标,處理完成后按照選項的規(guī)定進行輸出或文件的修改绝淡。

接著處理下一行,這樣不斷重復苍姜,直到文件末尾牢酵。文件內(nèi)容并沒有改變,除非你使用重定向存儲輸出衙猪。Sed主要用來自動編輯一個或多個文件馍乙;簡化對文件的反復操作;

sed也是支持正則表達式的垫释,如果要使用擴展正則加參數(shù)-r

sed的執(zhí)行過程:

(1)一次讀取一行數(shù)據(jù)

(2)根據(jù)我們提供的規(guī)則來匹配相關的數(shù)據(jù)潘拨,比如查找root

(3)按照命令修改數(shù)據(jù)流中的數(shù)據(jù),比如替換

(4)將結(jié)果進行輸出

(5)重復上面四步

23.3.2 ?如何使用

語法格式:sed ?[options] ‘[commands]’?filename

例1:

[root@xuegod63 ~]# echo "this is apple" | sed 's/apple/dog/'

this is dog

有/的時候饶号,可以使用其他界定符

[root@xuegod63 ~]# echo "this is ap/ple " | sed 's@ap/ple@dog@'

this is dog

[root@xuegod63 ~]# echo "this is ap/ple " | sed 's/ap\/ple/dog/'

this is dog

[root@xuegod63 ~]# echo "this is apple" > a.txt

[root@xuegod63 ~]# sed 's/apple/dog/' a.txt

this is dog

[root@xuegod63 ~]# cat a.txt??#發(fā)現(xiàn)并沒有修改文件

this is apple

23.3.3 ?sed命令參數(shù)詳解

選項:

-a在當前行下面插入文件

-n讀取下一個輸入行铁追,用下一個命令處理新的行而不是用第一個命令(取消默認輸出)

-e 執(zhí)行多個sed指令

-f 運行腳本

-i編輯文件內(nèi)容 ***

-i.bak 編輯的同時創(chuàng)造.bak的備份

-r使用擴展的正則表達式

命令:

i在當前行上面插入文件

c把選定的行改為新的指定的文本

p打印 ***

d刪除 ***

r/R 讀取文件/一行

w另存

s查找

y 替換

h 拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。

H 追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)茫船。

g 獲得內(nèi)存緩沖區(qū)的內(nèi)容琅束,并替代當前模板塊中的文本。

G 獲得內(nèi)存緩沖區(qū)的內(nèi)容算谈,并追加到當前模板塊文本的后面

D 刪除\n之前的內(nèi)容

P 打印\n之前的內(nèi)容

替換標記:

數(shù)字:表明新文本將替換第幾處模式匹配的地方

g:表示新文本將會替換所有匹配的文本

\1:子串匹配標記涩禀,前面搜索可以用元字符集\(..\),

&:保留搜索到的字符用來替換其它字符

sed匹配字符集

^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行然眼。

$ 匹配行結(jié)束艾船,如:/sed$/匹配所有以sed結(jié)尾的行。

. 匹配一個非換行符的任意字符高每,如:/s.d/匹配s后接一個任意字符屿岂,最后是d。

* 匹配0個或多個字符鲸匿,如:/*sed/匹配所有模板是一個或多個空格后緊跟sed的行爷怀。

例1:s 只替換第一個匹配到的字符,將passwd中的root用戶替換成xuegod

[root@xuegod63 ~]# cp ?/etc/passwd ??./

[root@xuegod63 ~]# ?sed 's/root/xuegod/' ??passwd | grep?xuegod

xuegod:x:0:0:root:/root:/bin/bash???#發(fā)現(xiàn)只替換了第一個匹配的root带欢,后面的沒有替換

bin:x:1:1:bin:/bin:/sbin/nologin

例2:全面替換標記g

[root@xuegod63 ~]# ?sed 's/root/xuegod/g' ??passwd ?| grep xuegod

xuegod:x:0:0:xuegod:/xuegod:/bin/bash????#全部替換了

把/etc/passwd文件每行開頭加上hello

[root@xuegod63 ~]# sed 's/^/hello /' /etc/passwd

例2: 將sed中默認的/ 定界符改成#號

[root@xuegod63 ~]# sed 's#/bin/bash#/sbin/nologin#' /etc/passwd ?| head -5

root:x:0:0:root:/root:/sbin/nologin

bin:x:1:1:bin:/bin:/sbin/nologin

以/來做定界符:?

則需要轉(zhuǎn)義符运授,先輸入源內(nèi)容和替換內(nèi)容烤惊,然后輸入轉(zhuǎn)義符,最后輸入界定符

[root@xuegod63 ~]# sed 's/\/bin\/bash/\/sbin\/nologin/' passwd | head -5

(2)按行查找替換

寫法如下:

用數(shù)字表示行范圍吁朦;$表示最末行

用文本模式配置來過濾

例1:單行替換柒室,將第2行中bin替換成xuegod

[root@xuegod63 ~]# sed '2s/bin/xuegod/' passwd ?| head -2

root:x:0:0:root:/root:/bin/bash

xuegod:x:1:1:bin:/bin:/sbin/nologin

例2:多行替換,如果涉及到多行處理逗宜,用逗號表示行間隔雄右。 將第2行到最末行中bin替換成xuegod,$匹配行結(jié)束

[root@xuegod63 ~]# sed '2,$s/bin/xuegod/' /etc/passwd ?| more

root:x:0:0:root:/root:/bin/bash

xuegod:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sxuegod:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sxuegod/nologin

(3)d ?刪除行第2行到第4行的內(nèi)容

[root@xuegod63 ~]# cat /etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.50 centos50

192.168.1.63 xuegod63

192.168.1.64 xuegod64

192.168.1.80 centos80

192.168.1.90 centos90

192.168.1.100 centos100

[root@xuegod63 ~]# ?sed '2,4d' /etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

192.168.1.64 xuegod64

192.168.1.80 centos80

192.168.1.90 centos90

192.168.1.100 centos100

[root@xuegod63 ~]# sed '/192.168/d' /etc/hosts??#將包括192.168的行刪除

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

(4)添加行

命令i(insert插入)锦溪,在當前行前面插入一行 ?i\

命令a(append附加)不脯,在當前行后面添加一行 a\

例1:插入

[root@xuegod63 ~]# echo "hello world" | sed ?'i\xuegod '

?xuegod

hello world

例2:追加

[root@xuegod63 ~]# ?echo "hello world"|sed 'a\xuegod'

hello world

xuegod

例3:在文件最后追加內(nèi)容

[root@xuegod63 ~]# ??sed '$a\192.168.100.100 xuegod100.cn'/etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.63 ??xuegod63.cn

192.168.1.64 ??xuegod64.cn

192.168.1.62 ??xuegod62.cn

192.168.100.100 xuegod100.cn

例4:在文件中第2行之后,開始追加內(nèi)容

[root@xuegod63 ~]# ??sed '2a\192.168.100.100 xuegod100.cn' ??/etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.100.100 xuegod100.cn

192.168.1.63 ??xuegod63.cn

192.168.1.64 ??xuegod64.cn

192.168.1.62 ??xuegod62.cn

例5:在文件中第2行前插入一行

[root@xuegod63 ~]# ??sed '2i\192.168.100.100 xuegod100.cn' ??/etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

192.168.100.100 xuegod100.cn

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.63 ??xuegod63.cn

192.168.1.64 ??xuegod64.cn

192.168.1.62 ??xuegod62.cn

例6:在文件中第2行到第4行之后分別追加內(nèi)容

[root@xuegod63 ~]# ?sed '2,4a\hello world' passwd?| head

[root@xuegod63 ~]# ?sed '2,4a\192.168.100.100 xuegod100.cn' ??/etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.100.100 xuegod100.cn

192.168.1.63 ??xuegod63.cn

192.168.100.100 xuegod100.cn

192.168.1.64 ??xuegod64.cn

192.168.100.100 xuegod100.cn

192.168.1.62 ??xuegod62.cn

(5)修改行命令c (change) c\

例1:將第4行內(nèi)容改成aaa ?bbb

[root@xuegod63 ~]# cat /etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.63 ??xuegod63.cn

192.168.1.65 ??xuegod64.cn

192.168.1.62 ??xuegod62.cn

[root@xuegod63 ~]# ??sed '4c\aaaaa bbbbbb' ?/etc/hosts

例2:將第2行到最后全部修改成aaaaa bbbb

[root@xuegod63 ~]# ??sed '2,$c\aaaaa bbbb' ?/etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

192.168.1.65 xuegod65.cn

例3:將包括192.168.1.64行的內(nèi)容修改成192.168.100.100

[root@xuegod63 ~]# sed '/192.168.1.64/c\192.168.100.100' /etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.50 centos50

192.168.1.63 xueg/od63

192.168.100.100

192.168.1.80 centos80

192.168.1.90 centos90

192.168.1.100 centos100

[root@xuegod63 ~]# sed '/192.168.1/c\192.168.100.100' /etc/hosts

127.0.0.1 ??localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.100.100

192.168.100.100

192.168.100.100

192.168.100.100

192.168.100.100

192.168.100.100

(6)打印刻诊,直接打印文件中的內(nèi)容

例1:打印第2-5行內(nèi)容

[root@xuegod63 ~]# sed-n'2,5p' /etc/hosts

::1 ????????localhost localhost.localdomain localhost6 localhost6.localdomain6

例2:輸出文件中含有games的行

[root@xuegod63 ~]# sed -n '/games/p' /etc/passwd

例3:輸出文件中games與nobody間的部分防楷,包含games與nobody

[root@xuegod63 ~]# sed -n '/games/,/nobody/p' /etc/passwd

(7)將修改或過濾出來的內(nèi)容保存到另一個文件中

例2:將passwd中的包括root字樣的行保存到 c.txt 中

[root@xuegod63 ~]# sed -n '/root/wc.txt' /etc/passwd

[root@xuegod63 ~]# cat c.txt

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

(8)-i 對原文件修改,保存( 必會 ) ??使用場景: 替換或修改服務器配置文件

[root@xuegod63 ~]# sed-i's/root/xuegod/' ?passwd

[root@xuegod63 ~]# head -1 ?passwd

xuegod:x:0:0:root:/root:/bin/bash

修改IP地址為192.168.1.65

[root@xuegod63 ~]# sed -i 's/IPADDR=192.168.100.63/IPADDR=192.168.1.65/' /etc/sysconfig/network-scripts/ifcfg-ens33

23.4 ?cut命令

23.4.1 ?cut常用參數(shù)

cut命令用來顯示行中的指定部分则涯,刪除文件中指定字段复局。

說明:該命令有兩項功能,其一是用來顯示文件的內(nèi)容粟判,它依次讀取由參數(shù)file所指明的文件亿昏,將它們的內(nèi)容輸出到標準輸出上;其二是連接兩個或多個文件档礁,如cut f1?f2 > f3將把文件f1和fn的內(nèi)容合并起來角钩,然后通過輸出重定向符“>”的作用,將它們放入文件f3中呻澜。

語法: cut(選項)(參數(shù))

選項

-b:僅顯示行中指定范圍的字節(jié)數(shù)递礼;

-c:僅顯示行中指定范圍的字符;

-d:指定字段的分隔符羹幸,默認的字段分隔符為“TAB”脊髓;

-f:顯示指定字段的內(nèi)容;

例1:輸出系統(tǒng)中所有用戶名?

使用 -f 選項提取指定字段栅受,使用 -d 選項指定字段分隔符将硝,這里以:冒號做分隔

[root@xuegod63 ~]# cut -f1 -d ":" /etc/passwd

23.4.2 ?cut命令按列顯示

cut:可以將一串字符作為列來顯示,字符字段的記法:

N-:從第N個字節(jié)屏镊、字符依疼、字段到結(jié)尾;

N-M:從第N個字節(jié)闸衫、字符涛贯、字段到第M個(包括M在內(nèi))字節(jié)、字符蔚出、字段弟翘;

-M:從第1個字節(jié)、字符骄酗、字段到第M個(包括M在內(nèi))字節(jié)稀余、字符、字段趋翻。

上面是記法睛琳,結(jié)合下面選項將某個范圍的字節(jié)、字符指定為字段:

-b 表示字節(jié)踏烙;

-c 表示字符师骗;

-f 表示定義字段。

示例

例1:打印第1個到第3個字符:

[root@xuegod63 ~]# cut -c1-3 /etc/passwd

例2:打印前2個字符:

[root@xuegod63 ~]# cut -c-2 /etc/passwd

例3:打印從第2個字符開始到結(jié)尾:

[root@xuegod63 ~]# cut -c2- /etc/passwd

例 4:打印第1個到第3個字段:

[root@xuegod63 ~]# cut -f1-3 -d":" /etc/passwd

例 5:打印從第2個字段開始到結(jié)尾:

[root@xuegod63 ~]# cut -f2- -d":" /etc/passwd

23.5 ?實戰(zhàn)-bash腳本語法檢查和查看詳細的執(zhí)行過程

檢查語法是否有錯:

bash -v test.bash #查看bash是否存在語法錯誤

bash -x test.bash #查看bash詳細的執(zhí)行過程

[root@xuegod63 ~]# vim?a.sh

# Script to show debug of shell

#

sum=`expr $1 + $2`

echoo?$sum ??#這里故意寫錯

[root@xuegod63 ~]# bash -v a.sh

# Script to show debug of shell

#

num=`expr $1 + $2;touch abc.abc`

expr: 語法錯誤 ???#語法哪錯了讨惩? ??運行時沒有給參數(shù)

echoo $num ??#這里故意寫錯

a.sh:行4: echoo: 未找到命令

[root@xuegod63 ~]# sed -i 's/echoo/echo/' a.sh? #修改正確后

[root@xuegod63 ~]# bash-xa.sh 2 3

#查看詳細執(zhí)行過程辟癌。 注:這個腳本是真正執(zhí)行一遍,不是預執(zhí)行

++ expr 2 + 3

+ num=5

+ echo 5

-x?是調(diào)試用的荐捻,加了這個黍少,就會把腳本中的每條命令的執(zhí)行情況打印出來

更多學習資料移步公眾號【學神來啦】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市处面,隨后出現(xiàn)的幾起案子厂置,更是在濱河造成了極大的恐慌,老刑警劉巖魂角,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昵济,死亡現(xiàn)場離奇詭異,居然都是意外死亡野揪,警方通過查閱死者的電腦和手機访忿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囱挑,“玉大人醉顽,你說我怎么就攤上這事∑教簦” “怎么了游添?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長通熄。 經(jīng)常有香客問我唆涝,道長,這世上最難降的妖魔是什么唇辨? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任廊酣,我火速辦了婚禮,結(jié)果婚禮上赏枚,老公的妹妹穿的比我還像新娘亡驰。我一直安慰自己晓猛,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布凡辱。 她就那樣靜靜地躺著戒职,像睡著了一般。 火紅的嫁衣襯著肌膚如雪透乾。 梳的紋絲不亂的頭發(fā)上洪燥,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音乳乌,去河邊找鬼捧韵。 笑死,一個胖子當著我的面吹牛汉操,可吹牛的內(nèi)容都是我干的再来。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼客情,長吁一口氣:“原來是場噩夢啊……” “哼其弊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起膀斋,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤梭伐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仰担,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糊识,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年摔蓝,在試婚紗的時候發(fā)現(xiàn)自己被綠了赂苗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡贮尉,死狀恐怖拌滋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猜谚,我是刑警寧澤败砂,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站魏铅,受9級特大地震影響昌犹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜览芳,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一斜姥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦铸敏、人聲如沸缚忧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搔谴。三九已至魁袜,卻和暖如春桩撮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背峰弹。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工店量, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鞠呈。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓融师,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚁吝。 傳聞我的和親對象是個殘疾皇子旱爆,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容