8.13-shell特殊符號($、;、~、&、>、>>、2>、2>>、&>、 [ ]、 &&、||)

特殊符號 $
符號 $ 可以用作變量前面的標識符,還可以和 !結合起來使用。
!$:表示上一次使用的路徑

[root@evan-01 ~]# ls
11.txt  3.txt                a.txt     test             test2.txt.bak   testdir
1.txt   anaconda-ks.cfg      bb.txt    test2            test3_soft.txt  txtdir
2.txt   anaconda-ks.cfg.bak  ojbk.txt  test2_heard.txt  test3.txt.bak
[root@evan-01 ~]# cat 2.txt
123
456
123
456
abc
1
2
1
abc
[root@evan-01 ~]# ls -l !$
ls -l 2.txt
-rw-r--r--. 1 root root 30 Oct 21 10:22 2.txt
[root@evan-01 ~]#

特殊符號 ;
通常我們都是在一行中輸入一個命令,然後按回車就運行了。如果想在一行中運行兩個或兩個以上的命令,需要在命令之間加符號 ; 。

[root@evan-01 ~]# ls 2.txt ; wc -l 2.txt ; cat 2.txt
2.txt
9 2.txt
123
456
123
456
abc
1
2
1
abc
[root@evan-01 ~]# 

特殊符號 ~
符號 ~ 表示用戶的家目錄,root 用戶的家目錄是 /root ,普通用戶則是 /home/username。

[root@evan-01 ~]# cd ~
[root@evan-01 ~]# pwd
/root
[root@evan-01 ~]#
[root@evan-01 ~]# su evan1
[evan1@evan-01 root]$ cd ~
[evan1@evan-01 ~]$ pwd
/home/evan1
[evan1@evan-01 ~]$

特殊符號 &
如果想把一條命令放到後臺執行,則需要加上符號 &,它通常用於命令運行時間較長的情況。比如,可以用在 sleep 後。

[root@evan-01 ~]$ sleep 30 &
[1] 1510
[root@evan-01 ~]$ jobs
[1]+  Running                 sleep 30 &
[root@evan-01 ~]$ 

重定向符號 >、>>、2>、2>>、&>
> 重定向

[root@evan-01 ~]$ echo "666" > 2.txt
[root@evan-01 ~]$ cat 2.txt
666
[root@evan-01 ~]$ 

>> 追加重定向

[root@evan-01 ~]$ echo "777" >> 2.txt
[root@evan-01 ~]$ cat 2.txt
666
777
[root@evan-01 ~]$ 

2> 錯誤重定向

[root@evan-01 ~]$ cat 2.txt
666
777
[root@evan-01 ~]$ lsascasc 2> 2.txt
[root@evan-01 ~]$ cat 2.txt
bash: lsascasc: command not found
[root@evan-01 ~]$

2>> 追加錯誤重定向

[root@evan-01 ~]$ cat 2.txt
bash: lsascasc: command not found
[root@evan-01 ~]$ lsbbbb 2>> 2.txt
[root@evan-01 ~]$ cat 2.txt
bash: lsascasc: command not found
bash: lsbbbb: command not found
[root@evan-01 ~]$

&> 正確、錯誤重定向到一個文件裏

[root@evan-01 ~]$ ls
2.txt     big2.txt.zip  big3.zip  big.txt.bz2  testdir2     testdir.tar.bz2  testdir.tar.xz
big2.txt  big3.txt      big4.txt  testdir      testdir.tar  testdir.tar.gz
[root@evan-01 ~]$ ls 2.txt abcd.txt &> 2.txt
[root@evan-01 ~]$ cat 2.txt
ls: cannot access abcd.txt: No such file or directory
2.txt
[root@evan-01 ~]$ 

中括號 [ ]
中括號內爲字符組合,代表字符組合中的任意一個,可以是一個範圍(1-3,a-z)
[1-3]

[root@evan-01 ~]# ls -d *.txt
11.txt  1.txt  2.txt  3.txt  a.txt  bb.txt  ojbk.txt  test2_heard.txt  test3_soft.txt
[root@evan-01 ~]# ls -d [1-3].txt
1.txt  2.txt  3.txt
[root@evan-01 ~]#

[12a]

[root@evan-01 ~]# ls -d *.txt
11.txt  1.txt  2.txt  3.txt  a.txt  bb.txt  ojbk.txt  test2_heard.txt  test3_soft.txt
[root@evan-01 ~]# ls -d [12a].txt
1.txt  2.txt  a.txt
[root@evan-01 ~]# 

[1-3a-z]

[root@evan-01 ~]# ls -d *.txt
11.txt  1.txt  2.txt  3.txt  a.txt  bb.txt  ojbk.txt  test2_heard.txt  test3_soft.txt
[root@evan-01 ~]# ls -d [1-3a-z].txt
1.txt  2.txt  3.txt  a.txt
[root@evan-01 ~]# 

特殊符號 && 和 ||
前面提到的分號可作多條命令間的分隔符,其實還有兩個可以用於多條命令中間的特殊符號,那就是 && 和 || 。

|| 或者
第一條命令執行成功後就不再往後執行了,如果第一條命令失敗了,那接着往下執行第二條
之前用 ; 分隔的,同時執行兩條命令

[root@evan-01 ~]# ls la.txt ; wc -l 2.txt
ls: cannot access la.txt: No such file or directory
9 2.txt
[root@evan-01 ~]#

|| 或者(當第一條命令執行失敗後,還會接着往後執行)

[root@evan-01 ~]# ls la.txt || wc -l 2.txt
ls: cannot access la.txt: No such file or directory
9 2.txt
[root@evan-01 ~]#

看起來和上面用 ; 分隔的結果一樣,實際不是。當第一條命令執行失敗後,還會接着往後執行。

|| 或者(當第一條命令執行成功後,就不再往後執行了。)

[root@evan-01 ~]# ls 1.txt || wc -l 2.txt
1.txt
[root@evan-01 ~]# 

當第一條命令執行成功後,就不再往後執行了。

&& 並且
當第一條命令執行成功後,纔會接着往下執行,如果第一條就失敗的話,就不再往下執行了

[root@evan-01 ~]# ls 1.txt && wc -l 2.txt
1.txt
9 2.txt
[root@evan-01 ~]# 
[root@evan-01 ~]# ls la.txt && wc -l 2.txt
ls: cannot access la.txt: No such file or directory
[root@evan-01 ~]#
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章