bash&shell系列文章:
linux中可以使用分號「;」、雙and號「&&」和雙豎線「||」來連線多個命令。單"&"符號也算命令連線符號,只不過它是將其前面的命令放入後台執行,所以可以變相地實現命令並行執行。
command1 ; command2命令之間沒有邏輯關係。分號連線的命令會按照順序從前向後依次執行,但分號兩端的命令之間沒有任何邏輯關係,所有寫出來的命令最終都會被執行,即使分號前面的命令出錯也不影響後面的命令。
[root@xuexi ~]# ls das;echo"hdakl
"ls: cannot access das: no such file
or directory
hdakl
command1 && command2邏輯與。&&連線的命令會按照順序從前向後執行,但只有當command1正確執行才執行command2,如果command1不正確執行,則不執行command2。在bash中,通過預定義變數「$?」來判斷命令是否正確執行,如果"$?"的值為0則表示前一條命令正確執行,其他任意值都表示不正確執行。\
[root@xuexi ~]# echo"hdakl
" && ls
ds hdakl
ls: cannot access ds: no such file or directory
[root@xuexi ~]# ls das && echo"hdakl
"ls: cannot access das: no such file or directory
command1 || command2邏輯或。||連線的命令會按照順序從前向後執行,但只有當command1不正確執行才執行command2,command1正確執行則不會執行command2。||和&&都是短路符號,符號左右的命令之間具有邏輯關係。
[root@xuexi ~]# ls das || echo"hdakl
"ls: cannot access das: no such file
or directory
hdakl
[root@xuexi ~]# echo"hdakl
" || ls
ds
hdakl
一般要聯合使用&&和||的時候,基本上都會先邏輯與再邏輯或:command1 && command2 || command3。因為在實際中,command2和command3應該都是想要執行的命令。如果command1正確執行,$?就等於0,執行command2,再看情況執行command3,如果command1錯誤執行,$?就不等於0,所以不執行command2,根據$?為非0值,判斷了 || 右邊的命令應該被執行。
通俗點的理解方法是根據語義判斷。「如果...就...否則...就...」的語句使用「cmd1 && cmd2 || cmd3」,「如果不...就...否則...就...」使用「!cmd1 && cmd2 || cmd3」。
例如,如果使用者user1存在,就顯示使用者已經存在,否則,就新增此使用者。
[root@xuexi tmp]# id user1 && echo"user1 exists
" || useradd user1
如果使用者user2不存在,則新增此使用者,否則顯示使用者已存在。
[root@xuexi tmp]# !id user2 && useradd user2 || echo"user2 exists
"
如果使用者user3不存在,則新增此使用者,並設定其密碼為使用者名稱本身,否則顯示使用者已存在。
[root@xuexi tmp]# !id user3 && useradd user3 && echo"user3
" | passwd --stdin user3 || echo
"user3 exists
"
command1 &&表示將其前面的命令放入後台執行,放入後台後會立即返回到bash環境讓使用者可以繼續和bash互動。如果&符號連線了兩個命令,則其前面的命令被放入後台,立即執行後面的命令,所以可以簡單地認為這兩個命令是並行執行的,兩端的命令之間也沒有任何邏輯關係。command1 & command2
需要注意的一點是,在終端的bash環境下,子shell中的後台的程序不受終端控制,在終端被關閉時它會掛靠在init/systemd程序下,因此退出終端或指令碼shell環境,無法中斷這些後台程序。例如:
[root@xuexi ~]# (sleep10 &) # 終端1上執行,立即關閉該終端
[root@xuexi ~]# ps aux | grep
slee[p] # 終端2上捕捉sleep程序
root
5732
0.00.0
107892
624 ? s 00:28
0:00
sleep
10
注意ps結果中的"?",它表示非終端程序,即脫離了終端。
執行Shell指令碼(多種方法)
在新程序中執行 shell 指令碼有多種方法。1 將 shell 指令碼作為程式執行 shell 指令碼也是一種解釋執行的程式,可以在終端直接呼叫 需要使用 chmod 命令給 shell 指令碼加上執行許可權 如下所示 mozhiyan localhost cd demo 切換到 test.sh ...
shell指令碼多程序
shell指令碼再執行過程中就乙個程序,從頭到尾 下面配置shell指令碼執行過程中啟動多個程序同時執行 bin bash for i 1 i 10 i do echo i sleep 10 done wait echo e seconds 注 seconds 是執行完指令碼所用的時間 wait 是...
shell指令碼 eval執行shell命令
和其他語言的eval功能差不多,都是將乙個儲存執行語句的變數作為引數,eval會讓變數所儲存的語句執行。下面是乙個執行表單提交的命令 注意,這裡只是示例,應用中不要這麼使用,很危險 bin bash index.cgi echo content type text html charset utf ...