CentOS 7 Shell脚本编程第五讲 再讲特殊符号 --未完待续

上文已经讲过$开头部分符号用法。本文将详细解读其余符号用法。本文符号未做说明都是英文符号。` `通常位于键盘上~符号下面。正则表达式

[root@promote ~]# echo `date`
2019年 03月 31日 星期日 21:02:51 CST
[root@promote ~]#

首先讲解;和:。vim

:表示“不执行任何命令”,同时也用于时间分隔等。bash

  ;表示顺序地独立执行各条命令, 彼此之间不关心是否失败, 全部命令都会执行。 文件内分号用于代码块分隔,命令窗口用于分隔不一样命令。;;本文不讲。ssh

[root@promote ~]# ls ; date
anaconda-ks.cfg 
2019年 03月 31日 星期日 20:59:13 CST

#mkdir test;cd test;mkdir dir;cd dir 等价于mkdir -p test/dir;cd dir
[root@promote test]# pwd
/root
[root@promote ~]# mkdir test;cd test;mkdir dir;cd dir
#注意三者/root pwd 命令输出结果区别
[root@promote ~]# mkdir -p ./test/dir #递归建立目录
[root@promote ~]# mkdir -p test/dir
[root@promote ~]# mkdir -p /test/dir

"" '' 用于字符串,通常成对出现。`(反引号,Tab和数字1旁边)较少见。spa

| 表示管道,用于隔离不一样命令,||表示上一个命令执行成功后执行后续命令。code

#执行成功再也不执行后续语句,失败提示出错缘由
[root@promote ~]# ls || pwd
anaconda-ks.cfg  test
[root@promote ~]# ldd || pwd
ldd: 缺乏文件参数
试用“ldd --help”以获取更多信息。
/root
[root@promote ~]# now || pwd
-bash: now: 未找到命令
/root
[root@promote ~]#

\放在自定义命令前取消命令执行结果返回错误。放在特殊符号前,则该特殊符号的做用消失;转义符有\t (水平制表符)、\c(取消当前输入)、 \r(回车)、 \b(退格)、 \v(纵向制表符)等。\c 用法见代码。递归

[root@promote ~]# echo 'alias now="date"' >.bashrc
[root@promote ~]# vim .bashrc 
[root@promote ~]# source .bashrc 
[root@promote ~]# now
2019年 03月 31日 星期日 19:53:16 CST
[root@promote ~]# \now
-bash: now: 未找到命令
[root@promote ~]# 
[root@promote ~]# touch test.log
[root@promote ~]# ls
test.log  anaconda-ks.cfg  test
[root@promote ~]# rm ./*.log
rm:是否删除普通空文件 "./test.log"?y
[root@promote ~]# ls
anaconda-ks.cfg  test
[root@promote ~]# 
#\用法
echo #!/bin/sh
echo "OK! \c" 
echo "It is a test text." >testc.sh

[root@promote ~]# echo "OK! \c" 
OK! \c
[root@promote ~]# echo "It is a test text." >testc.sh
[root@promote ~]# 
[root@promote ~]# ls
anaconda-ks.cfg  test  testc.sh
[root@promote ~]# cat testc.sh
It is a test text.
[root@promote ~]# 

[root@promote ~]# echo '\@'
\@
[root@promote ~]# echo '\\'
\\
[root@promote ~]# echo "\'"
\'
[root@promote ~]# echo '\^'
\^

<>通常成对出现。< 表示输入重定向,> 表示输出重定向,覆盖内容,>> 输出重定向,追加内容<<表示标准输入。字符串

,和.都有分隔做用,.表示当前目录,..表示上一级目录,.还有区分文件类型最用,例如test.txt。.开头文件(夹)为隐藏文件(夹)。数学

[root@promote ~]# cd /
[root@promote /]# cd .
[root@promote /]# cd /usr/bin/
[root@promote bin]# cd ..
[root@promote usr]# ls
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
[root@promote usr]# pwd
/usr
[root@promote usr]# ls .
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
[root@promote usr]# ls ..
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test  tmp  usr  var
[root@promote usr]# 
#注意对比隐藏文件和文件夹
[root@promote ~]# ls
anaconda-ks.cfg  test  testc.sh  testname.sh  test.sh
[root@promote ~]# ls -a
.   anaconda-ks.cfg  .bash_logout   .bashrc  .pki  .tcshrc  testc.sh     test.sh    .viminfo
..  .bash_history    .bash_profile  .cshrc   .ssh  test     testname.sh  .test.txt
[root@promote ~]#

/表示文件夹分隔符,同时表示根目录。test

?表示匹配一个字符。

[root@promote ~]# cd /
[root@promote /]# 
[root@promote ~]# touch test.tex
[root@promote ~]# ls
anaconda-ks.cfg test  test.tex  test.txt 
[root@promote ~]# ls tes?.t??
test.tex  test.txt
[root@promote ~]#

~表示用户文件夹。

[root@promote ~]#

!表示取反。例如!=表示不等于,ls a[!0-2]txt表示仅显示a接0-9文件名。

[root@promote ~]# ls
a1.txt  a2.txt  a3.txt  a8.txt  aa.txt  ab.txt  ac.txt  anaconda-ks.cfg  test  testc.sh  test.sh
[root@promote ~]# ls a[1-2].txt
a1.txt  a2.txt
[root@promote ~]#

@通常和其余符号一块儿使用,也用于ssh登陆,例如ssh root@192.168.100.100 。

#用于脚本注释。

%用于正则表达式和部分其余符号混用。

^用于匹配字符。

&用于将指令放入后台运行。&&表示当前语句执行成功继续执行后续语句,不然报错。

*用于表示任意字符或文件。

()通常成对出现,用于语句块。

+-*/=还有数学运算符号做用。==表示相等。

{}[]用于语句块流程控制等。[]同时用于匹配字符等。[[]]符号与 [] 符号做用基本相同,前者容许在其中直接使用 || 与&& 逻辑等符号。

\< \>用于字符精细匹配。例如<the>没法匹配there。

相关文章
相关标签/搜索