Shell指令碼語法與應用(三)

2021-10-06 17:43:10 字數 4324 閱讀 6589

3、命令替換

4、邏輯判斷(&&、||)

管道就是將左邊命令的執行結果,作為標註輸入到右邊的命令,管道兩邊的命令在當前 shell 的兩個子程序中執行。

ps aux | grep bash就是乙個管道用法,通過|分隔左右兩邊命令,ps aux表示顯示當前系統所有程序

[root@localhost ~

]# ps aux

user

pid%

cpu%

memvsz

rsstty

stat

start

time

command

root 1

0.51.6

178568

13460

? ss 22:53

0:03/usr/lib/systemd/systemd --switched-root --system --deserialize 17

root 2

0.00.000

?s22:

530:00

[kthreadd]

root 3

0.00.000

?i<22:

530:00

[rcu_gp]

root 4

0.00.000

?i<22:

530:00

[rcu_par_gp]

root 5

0.10.000

?i22:

530:00

[kworker/0:

0-events_power_efficient]

root 6

0.00.000

?i<22:

530:00

[kworker/0:

0h-kblockd]

root 7

0.00.000

?r22:

530:00

[kworker/u256:

0-events_unbound]

root 8

0.00.000

?i<22:

530:00

[mm_percpu_wq]

root 9

0.00.000

?s22:

530:00

[ksoftirqd/0]

省略中間部分...

...root 1792

0.01.1

93040

9456

? ss 22:55

0:00/usr/lib/systemd/systemd --user

root 1796

0.00.5

238728

4736?s

22:550

:00(sd-pam)

root 1802

0.00.6

159416

5348?s

22:550

:00 sshd: root@pts/

0root 1803

0.00.5

26360

4760 pts/

0 ss 22:55

0:00-bash

root 1826

0.00.000

?i22:

580:00

[kworker/0:

1-mm_percpu_wq]

root 1838

0.00.4

57380

3772 pts/0r

+23:02

0:00 ps aux

grep bash表示從左邊獲取到的所有程序結果中檢視bash程序

[root@localhost ~

]# ps aux | grep bash

root 1803

0.00.5

26360

4756 pts/

0 ss 22:55

0:00-bash

root 1825

0.00.1

12320

1096 pts/0r

+22:57

0:00 grep --color=auto bash

雙引號是弱引用,裡面的內容支援引數引用。定義乙個變數c,在雙引號中引用,可以輸出變數$c中的值

[root@localhost ~

]# c=

"zhangsan"

[root@localhost ~

]# echo "我是$c"

我是zhangsan

單引號是強引用,裡面所有內容都被當成字串,輸出的只是變數符號本身$c

[root@localhost ~

]# echo '我是$c'

我是$c

花括號可以做擴充套件,使用命令mkdir ./dir,可以同時建立3個目錄,abc後面拼接了相同的dir字元

[root@localhost shell]# mkdir .

/dir

[root@localhost shell]# ll

總用量 12

drwxr-xr-x.

2 root root 6

6月 123:

17 adir

drwxr-xr-x.

2 root root 6

6月 123:

17 bdir

drwxr-xr-x.

2 root root 6

6月 123:

17 cdir

使用命令unset + 變數名即可

[root@localhost shell]# echo $c

zhangsan

[root@localhost shell]# unset c

[root@localhost shell]# echo $c

[root@localhost shell]#

命令替換允許我們將 shell 命令的輸出賦值給變數,方便使用。

定義乙個變數a,值是反引號包裹的檢視命令ls -a,再次引用時會執行該命令

[root@localhost shell]# a=

`ls -a`

[root@localhost shell]# echo $a..

.1.txt adir bdir cdir test01.sh test02.sh test03.sh tmp

定義乙個變數b,值是$()包裹的檢視命令ls -a,再次引用時會執行該命令

[root@localhost shell]# b=

$(ls -a)

[root@localhost shell]# echo $b..

.1.txt adir bdir cdir test01.sh test02.sh test03.sh tmp

格式:command1 && command2,當第乙個條件為假,第二個條件不用判斷,結果為假

當前目錄中有tmp目錄,第乙個條件為真,所以會執行第二個列印條件

[root@localhost shell]# test -d /tmp && echo "tmp目錄存在"

tmp目錄存在

格式:command1 || command2,第乙個條件為真,第二個條件不用判斷,結果為真

tmp目錄下沒有11目錄,第乙個條件為假,所以會執行第二個列印條件

[root@localhost shell]# test -d /tmp/

11|| echo "11目錄不存在"

11目錄不存在

一文搞定linux常見用法(彙總

Shell指令碼應用(三)

一 使用for語句應用示列 1 1 根據姓名列表批量新增使用者 批量新增使用者的指令碼 root centos01 vim uaddfor.sh bin bash ulist cat root users.txt for uname in ulist douseradd uname echo 123...

Shell指令碼語法

定義單變數 p name kang 使用單變數 echo p name js 輸出kang.js echo p name.js 輸出kang.js cp p name.js copy.js 命令1 命令2 如果左邊的 命令1 執行成功,那麼右邊的 命令2 才會被執行。命令1 命令2 與 相反。如果 ...

shell指令碼 語法

條件測試 test 命令test 可以測試乙個條件是否成立,如果測試條件為真,則該命令的exitstatus為0,反之,exitstatus為1。注意 命令 各引數之間應該用空格隔開,以 結尾。但是 不是命令。測試命令 d dir 如果dir存在並且是乙個目錄則為真 f file 如果file存在並...