shell 中特殊符号

在学习linux的过程中,也许你已经接触过某个特殊符号,例如”*”,它是一个通配符号,代表零个或多个字符或数字。下面阿铭就说一说常用到的特殊字符。

* 代表零个或多个任意字符。

[[email protected] ~]# ls -d test*
test  test1  test2  test3

? 只代表一个任意的字符

[[email protected] ~]# touch testa
[[email protected] ~]# touch testb.txt
[[email protected] ~]# ls -d test?
test1  test2  test3  testa

不管是数字还是字母,只要是一个都能匹配出来。

# 这个符号在linux中表示注释说明的意思,即 # 后面的内容linux忽略掉。

[[email protected] ~]# abc=123 #aaaaa
[[email protected] ~]# echo $abc
123

\ 脱意字符,将后面的特殊符号(例如”*” )还原为普通字符。

[[email protected] ~]# ls -d test\*ls: 无法访问test*: 没有那个文件或目录

| 管道符,前面多次出现过,它的作用在于将符号前面命令的结果丢给符号后面的命令。这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用,例如cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等,其中grep, sed, awk为正则表达式必须掌握的工具,在后续内容中详细介绍。

[[email protected] ~]# cat testb.txt |wc -l
0

wc -l 用来计算一个文档有多少行。在这里阿铭一下子列出来很多对你陌生的命令,其实这些命令在日常的处理文档工作中非常实用,所以阿铭需要先简单介绍一下它们,如果你记不住没有关系,以后用到的时候再过来查或者直接用man来查询帮助文档。

特殊符号$

$除了用于变量前面的标识符外,还有一个妙用,就是和“!”结合起来使用。

[[email protected] ~]# ls 1.txt

1.txt

[[email protected] ~]# ls !$

ls 1.txt

1.txt

!$标识上一条命令中最后一个变量。

特殊符号 ;

运行两条命令以上的命令,命令中间用“;”隔开

特殊符号 ~

用户的家目录,如果是root则是/root,普通用户则是/home/username

特殊符号 &

让命令在后台运行,加在命令后面。

通常用于命令运行时间非常长的情况。

重定向符号 > >>  2>  2>>

>取代   >>追加

2>错误重定向

2>>错误追加重定向

中括号[ ]

中间为字符组合,代表中间字符中的任意一个。

详见P164~167

$ 除了用于变量前面的标识符外,还有一个妙用,就是和 ‘!’ 结合起来使用。

[[email protected] ~]# ls testb.txt
testb.txt
[[email protected] ~]# ls !$
ls testb.txt
testb.txt

‘!$’ 表示上条命中中最后一个变量(总之就是上条命令中最后出现的那个东西)例如上边命令最后是testb.txt那么在当前命令下输入!$则代表testb.txt.

; : 分号。平时我们都是在一行中敲一个命令,然后回车就运行了,那么想在一行中运行两个或两个以上的命令如何呢?则需要在命令之间加一个 ”;” 了。

[[email protected] ~]# ls -d test*;  touch test111; ls -d test*
test  test1  test2  test3  testa  testb.txt
test  test1  test111  test2  test3  testa  testb.txt

~ : 用户的家目录,如果是root则是 /root ,普通用户则是 /home/username

[[email protected] ~]# cd ~
[[email protected] ~]# pwd
/root
[[email protected] ~]# su test
[[email protected] root]$ cd ~
[[email protected] ~]$ pwd
/home/test

& : 如果想把一条命令放到后台执行的话,则需要加上这个符号。通常用于命令运行时间非常长的情况。

[[email protected] ~]# sleep 30 &
[1] 3260
[[email protected] ~]# jobs
[1]+  Running                 sleep 30 &

>, >>, 2>, 2>> 前面讲过重定向符号> 以及>> 分别表示取代和追加的意思,然后还有两个符号就是这里的2> 和 2>> 分别表示错误重定向和错误追加重定向,当我们运行一个命令报错时,报错信息会输出到当前的屏幕,如果想重定向到一个文本里,则要用2>或者2>>

[[email protected] ~]# ls aaaals: 无法访问aaaa: 没有那个文件或目录[1]+  Done                    sleep 30
[[email protected] ~]# ls aaaals: 无法访问aaaa: 没有那个文件或目录[[email protected] ~]# ls aaaa 2> /tmp/error
[[email protected] ~]# cat /tmp/errorls: 无法访问aaaa: 没有那个文件或目录[[email protected] ~]# ls aaaa 2>> /tmp/error
[[email protected] ~]# cat /tmp/errorls: 无法访问aaaa: 没有那个文件或目录
ls: 无法访问aaaa: 没有那个文件或目录

[ ] 中括号,中间为字符组合,代表中间字符中的任意一个。

[[email protected] ~]# ls -d test*
test  test1  test111  test2  test3  testa  testb.txt
[[email protected] ~]# ls -d test[1-3]
test1  test2  test3
[[email protected] ~]# ls -d test[1a3]
test1  test3  testa
[[email protected] ~]# ls -d test[0-9]
test1  test2  test3
[[email protected] ~]# ls -d test[0-9a-z]
test1  test2  test3  testa

&& 与 ||

在上面刚刚提到了分号,用于多条命令间的分隔符。另外还有两个可以用于多条命令中间的特殊符号,那就是 “&&” 和 “||” 下面把这几种情况全列出:

  1. command1 ; command2
  2. command1 && command2
  3. command1 || command2

使用 ”;” 时,不管command1是否执行成功都会执行command2;

使用 “&&” 时,只有command1执行成功后,command2才会执行,否则command2不执行;

使用 “||” 时,command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行。

在做实验前,阿铭想把所有的 test* 删除掉,可是删除的时候,却提示说权限不够,下面是阿铭排除问题的过程:

[[email protected] ~]# rm -rf test*
rm: 无法删除"test2/test1": 权限不够
rm: 无法删除"test2/test3": 权限不够
rm: 无法删除"test2/test4": 权限不够
[[email protected] ~]# ls test*
test1  test3  test4
[[email protected] ~]# lsattr test*
-----a-------e- test2/test1
----i--------e- test2/test3
-------------e- test2/test4
[[email protected] ~]# chattr -a test2/test1
[[email protected] ~]# chattr -i test2/test3
[[email protected] ~]# rm -rf test*
rm: 无法删除"test2/test1": 权限不够
rm: 无法删除"test2/test3": 权限不够
rm: 无法删除"test2/test4": 权限不够
[[email protected] ~]# ls test*
test1  test3  test4
[[email protected] ~]# ls -ld test*
drwxrwxr-x 2 root root 4096 5月  10 10:12 test2
[[email protected] ~]# ls -l test2/*
-rw-r--r-- 1 root root 6 5月  10 10:20 test2/test1
-rw-r--r-- 1 root root 0 5月  10 10:11 test2/test3
-rw-r--r-- 1 root root 0 5月  10 10:12 test2/test4
[[email protected] ~]# lsattr test2/*
-------------e- test2/test1
-------------e- test2/test3
-------------e- test2/test4
[[email protected] ~]# lsattr test2
-------------e- test2/test1
-------------e- test2/test3
-------------e- test2/test4
[[email protected] ~]# lsattr -d test2
----i--------e- test2
[[email protected] ~]# chattr -i test2/
[[email protected] ~]# rm -rf test2/

如果你之前跟着阿铭做过同样的实验,相信你也会出现同样的问题的。接下来阿铭要通过做实验来说明 “&&” 与 “||” 这两个特殊符号的作用:

[[email protected] ~]# touch test1 test3
[[email protected] ~]# ls test2 && touch test2
ls: 无法访问test2: 没有那个文件或目录
[[email protected] ~]# ls test2
ls: 无法访问test2: 没有那个文件或目录
[[email protected] ~]# ls test2 || touch test2
ls: 无法访问test2: 没有那个文件或目录
[[email protected] ~]# ls test*
test1  test2  test3

时间: 2024-10-01 02:26:56

shell 中特殊符号的相关文章

1.4 shell中特殊符号

#命令输入特殊符号 * 是匹配0个或多个字符 ? 是匹配一个字符 #是加上这行不生效 \ 是脱义符 $是变量的前缀,使用变量 ; 是用在两条命令的中间 []是匹配两个文件 ls [12].txt  == ls 1.txt 2.txt 习题: 1. 下面特殊符号的用法哪个是对的? ls *.txt会把1.txt  22.txt 333.txt全部列出来 ls ?.txt会把1.txt  2.txt  3.txt全部列出来 touch \#会创建一个文件名为#的文件 2. 分号在shell中有什么用

Linux_note shell中特殊符号

* 代表0个或多个任意字符 ? 只代表一个任意字符 # 注释符号 \ 脱意符号 [[email protected] ~]# ls #1.txt   #将后面内容注释 只运行了ls 111      1.tar  3.txt            install.log         yasuo.zip 111.tar  1.txt  anaconda-ks.cfg  install.log.syslog 123.txt  2.txt  a.txt            yasuo [[ema

shell中特殊符号

*   多个 ?   1个 #   注释符 \    脱义符 |     管道符 $    作为变量的前缀,用于使用变量 !$   使用上一条命令的最后一个参数 ;     用于两条命令的中间写在一行 ~   用户的家目录 &   表示命令丢到后台     比如    sleep 100 & >    重定向 >>  追加重定向 2>   错误重定向 2>> 错误追加重定向 <     反重定向 []     表示范围中的一位   比如[0-9]

Shell中的符号(施工中。。。)

1.` 和 $()的区别 反引号本身就对\进行了转义,保留了其本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示.所以我们可以简单的想象成反引号中: \\ = \ $()中则不需要考虑\的问题,与我们平常使用的一样:\ = \ 题外话: 反引号是老的用法,$()是新的用法,不管是在学习测试中,还是在实际工作中,$()的用法都是被推荐的. 2.eval命令 3.crontab命令 crontab命令的功能是在一定的时间间隔调度一些命令的执行. 我们可以用crontab -

shell中的界定

shell中有些符号在不同界定下会被不同处理,界定主要有3种方式: (1)单引号 (2)双引号 (3)反引号 我们最常用的就是双引号和单引号,对于这2个符号,用$变量可以很清楚的说明它们的区别,如下: [[email protected] ~]$ echo 'Home is $HOME' Home is $HOME [[email protected] ~]$ echo "Home is $HOME" Home is /home/map 我们可以很清楚的总结出规律:单引号中$HOME被

shell中常用的特殊符号

在shell中常用的特殊符号罗列如下: # ; ;; . , / \ 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# [email protected] `command`{} [] [[]] () (()) || && {xx,yy,zz,...}~ ~+ ~- & \<...\> + - %= == != # 井号 (comments) 注释字符 该句不会被执行 ~ 帐户的 home 目录 用户的

linux shell中的比较符号与特殊符号介绍

shell字符串比较.判断是否为数字  二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.  整数比较  -eq 等于,如:if [ "$a" -eq "$b" ]  -ne  不等于,如:if [ "$a" -ne "$b" ]  -gt 大于,如:if [ "$a" -gt "$b" ]  -ge 大于等于,如:if [  "$a" -ge "

linux shell中的特殊符号

该内容,均来自此网址(http://www.92csz.com/study/linux/12.htm).在下只是把那些命令的截图给去了. 你在学习linux的过程中,也许你已经接触过某个特殊符号,例如”*”,它是一个通配符号,代表零个或多个字符或数字.下面笔者就说一说常用到的特殊字符. 1. * :代表零个或多个字符或数字. test后面可以没有任何字符,也可以有多个字符,总之有或没有都能匹配出来. 2. ? :只代表一个任意的字符 不管是数字还是字母,只要是一个都能匹配出来. 3. # :这个

shell 中的特殊符号的含义

来源:http://blog.sina.com.cn/s/blog_62a151be0100x9rn.html 第四章 基本功 - 特殊符号 学习撰写 script 最迅速的捷径是观摩别人的 script 档案.不过,此法儘管实际,但这对于 shell 基础认知不足的人来说,通常都得到"事倍功半",甚至半途而废.通常第一个问题就是搞不懂那些"特殊符号"到底在代表什么意义,又到底她们干了些什么? 以下,农夫尝试列出常用的特殊符号表列,并在说明中加入简短的范例.原则上,