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 ~]#

你可能感兴趣的:(Linux,shell基础知识)