linux中特殊字符的含义,Linux中的特殊符号以及特殊语法
辨別||、&&、;、$*等符號在linux中的含義
與或
# 將&&前后的兩個命令當做一個表達式,如果表達式出錯,那么可以認為該表達式為false
? ~ ls / && date
bin boot dev etc home initrd.img initrd.img.old lastore lib lib64 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var vmlinuz vmlinuz.old
Thu Mar 21 14:18:44 HKT 2019
# 第一個命令失敗,后面的命令不再執行。短路,因為表達式整體的值已經可以通過第一個表達式獲得。
? ~ ls /hello && date
ls: cannot access '/hello': No such file or directory
# 與&&恰好相反
? ~ ls /hello || date
ls: cannot access '/hello': No such file or directory
Thu Mar 21 14:19:03 HKT 2019
# 第一個執行成功,已經可以獲得整個表達式的值,所以不執行第二個表達式。短路。
? ~ ls / || date
bin boot dev etc home initrd.img initrd.img.old lastore lib lib64 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var vmlinuz vmlinuz.old
分號;
表示過程,不計算值,因此按順序執行。
? ~ ls / ; date
bin boot dev etc home initrd.img initrd.img.old lastore lib lib64 lost+found media mnt opt proc root run sbin snap srv sys tmp usr var vmlinuz vmlinuz.old
Thu Mar 21 14:23:48 HKT 2019
? ~ ls /hello ; date
ls: cannot access '/hello': No such file or directory
Thu Mar 21 14:23:52 HKT 2019
$相關表達式
$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, ${10}, ${11}…
指令本身為0。后面為傳入參數。個位數的,可直接使用數字,但兩位數以上,則必須使用 {} 符號來括住。
#!/bin/bash
echo $#
echo $*
echo $@
echo $0
echo $1
echo $2
echo "--------"
# 當 $* 和 $@ 不被雙引號" "包圍時,它們之間沒有任何區別,都是將接收到的每個參數看做一份數據,彼此之間以空格來分隔。
for a in $*
do
echo ${a}
done
for a in $@
do
echo ${a}
done
echo "--------"
# 但是當它們被雙引號" "包含時,就會有區別了:
# "$*"會將所有的參數從整體上看做一份數據,而不是把每個參數都看做一份數據。
# "$@"仍然將每個參數都看作一份數據,彼此之間是獨立的。
for a in "$*"
do
echo ${a} # 這 2 個參數會合并到一起形成一份數據,它們之間是無法分割的
done
for a in "$@"
do
echo ${a} # 這 2 個參數是相互獨立的,它們是 2 份數據
done
輸出如下:
? Documents ./shell.sh hello world
2
hello world
hello world
./shell.sh
hello
world
--------
hello
world
hello
world
--------
hello world
hello
world
$?
獲取上一個命令的退出狀態
? ~ pkill -f xxxxoooo
? ~ echo $?
1
$!和$$
# Shell最后運行的后臺Process的PID
? ~ ping www.baidu.com > /dev/null &
[1] 14025
? ~ echo $!
14025
# Shell本身的PID(ProcessID)
? ~ ps -ef | grep -v grep | grep zsh
sasurai 9143 9122 0 09:48 pts/1 00:00:00 /usr/bin/zsh
sasurai 11946 5190 0 14:32 pts/4 00:00:00 /usr/bin/zsh
sasurai 19350 19085 0 10:52 pts/0 00:00:00 /usr/bin/zsh -i
? ~ echo $$
9143
輸出/輸入重導向
文件描述符
名稱
常用縮寫
默認值
0
標準輸入
stdin
鍵盤
1
標準輸出
stdout
屏幕
2
標準錯誤輸出
stderr
屏幕
我們在簡單地用時,相當于使用 0< 或 1>(下面會詳細介紹)。
cmd > file
把cmd命令的輸出重定向到文件file中。如果file已經存在,則清空原有文件,使用bash的noclobber選項可以防止復蓋原有文件。
cmd >> file
把cmd命令的輸出重定向到文件file中,如果file已經存在,則把信息加在原有文件後面。
cmd < file
使cmd命令從file讀入
cmd << text
從命令行讀取輸入,直到一個與text相同的行結束。除非使用引號把輸入括起來,此模式將對輸入內容進行shell變量替換。如果使用<
cmd <<< word
把word(而不是文件word)和後面的換行作為輸入提供給cmd。
cmd <> file
以讀寫模式把文件file重定向到輸入,文件file不會被破壞。僅當應用程序利用了這一特性時,它才是有意義的。
cmd >| file
功能同>,但即便在設置了noclobber時也會復蓋file文件,注意用的是|而非一些書中說的!,目前僅在csh中仍沿用>!實現這一功能。
: > filename 把文件"filename"截斷為0長度.# 如果文件不存在, 那么就創建一個0長度的文件(與’touch’的效果相同).
cmd >&n 把輸出送到文件描述符n
cmd m>&n 把輸出 到文件符m的信息重定向到文件描述符n
cmd >&- 關閉標準輸出
cmd 輸入來自文件描述符n
cmd m m來自文件描述各個n
cmd 關閉標準輸入
cmd 移動輸入文件描述符n而非復制它。(需要解釋)
cmd >&n- 移動輸出文件描述符 n而非復制它。(需要解釋)
注意: >&實際上復制了文件描述符,這使得cmd > file 2>&1與cmd 2>&1 >file的效果不一樣。
for循環
for var in 集合
do
cmd1...
done
while循環
while [ 條件 ]
do
echo "hello"
done
if條件語句
if [ 條件 ]; then
cmd1
elif [ 條件 ]; then
cmd2
else
cmd3
fi
case語句
case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac
總結
以上是生活随笔為你收集整理的linux中特殊字符的含义,Linux中的特殊符号以及特殊语法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 关闭防火墙firewall,
- 下一篇: vhd 镜像 备份Linux,差分VHD