文章目录

  • 特殊字符
    • `#`
    • `;`
    • `;;`
    • `.`
    • `""`
    • `''`
    • `,`
    • `\`
    • `/`
    • ` ` `
    • `:`
    • `!`
    • `*`
    • `?`
    • `$`
    • `()`
    • `{xxx,yyy,zzz,...}`
    • {}
    • `{} \;`
    • `[]`
    • `[[]]`
    • `(())`
    • `> &> >> < <>`
    • `<<、<<<`
    • `<、>`
    • `\<、\>`
    • `|`
    • `>|`
    • `||`
    • `&`
    • `&&`
    • `-`
    • `=`
    • `+`
    • `%`
    • `~`
    • `~+`
    • `~-`
    • `^`

特殊字符

<<shell热身>>大家对shell算是有个初步的了解,初步连接之后肯定想知道,这个工具怎样用,带着这些疑问,我们首先向探索其他语言一样,探索一下shell中的特殊字符以及其含义。

#

  1. 注释。但是行首(#!)开头是个例外,除了行首其他行的#均代表注释
# 这是一行注释。

当然注释也可以在一个命令行的后面,但是命令行不能在注释的后面

echo "后面会有一行注释"  # 注释的#与前面的语句要有空白

注释可以不用定格写

            # 这样也能写注释

当然转义之后的#是不能作为注释的,标准的引用和转义字符("'\'") 等可以用来转义#

;

命令分隔符,可以在同一行上写两个或多个命令。

echo "这是一个命令"; ls ; pwd

;;

终止case选项

#! /bin/bash
# $1 是输入给脚本的参数,如 bash case.sh 1 或 ./case.sh 1
case $1 in
1) echo "\$1 = 1" ;;
2) echo "\$1 = 2" ;;
esac

.

等价与source命令,是bash的一个内建命令,挡在脚本中使用这个命令加载一个脚本文件

点作为文件名的一部分,如果放在文件开头的话,那么将隐藏这个文件,并且使用ls命令也无法查看这个文件,需要通过ls -a命令才能显示隐藏文件

如果作为目录的话,一个单独的点,表示当前目录,两个点表示上一层目录

用于匹配的时候,正则中.可以匹配任何的单个字符

""

双引号会阻止 “string”, string中的大部分特殊字符

''

单引号,会阻止'string'中的所有特殊字符

逗号操作符. 逗号操作符链接了一系列的算术操作. 虽然里边所有的内容都被运行了,但只有最后一项被返回.

let "t2 = ((a = 9, 15 /3))"  # Set "a=9" and "t2 = 15 / 3"

\

转义字符,输出特殊字符时需要使用转义字符才能将特殊字符原样输出

echo "\" 打印双引号  "

/

文件路径分隔符

`

命令替换

:

  • 空命令,相当于执行NOP,总是返回成功,与bash的内建命令true相同,:是一个bash的内建命令,退出码(exit status)是true(0)
:
echo $?  # 0
while :
dooperation-1operation-2...operation-n
done# 与下边相同:
#   while true
#   do
#     ...
#   done
  • 占位符

if/then中的占位符:

if condition
then : 什么都不做,引出分支
else tack-some-action
fi

在一个二元命令中提供一个占位符

: ${username=`whoami`}
# ${username=`whoami`} 如果没有开头的 ":"的话,将会给出一个错误,除非"username"是一个命令或者内建命令
  • 使用参数替换来评估字符串变量

    如果一个或者多个必要的环境变量没有被设置的话,就打印错误信息

char_cap.sh

#!/bin/bash# 检查一些系统环境变量.
# 这是一种可以做一些预防性保护措施的好习惯.
# 比如, 如果$USER(用户在控制台上中的名字)没有被设置的话,
#+ 那么系统就会不认你.
: ${HOSTNAME?} ${USER?} ${HOME?} ${MAIL?}echoecho "Name of the machine is $HOSTNAME."echo "You are $USER."echo "Your home directory is $HOME."echo "Your mail INBOX is located in $MAIL."echoecho "If you are reading this message,"echo "critical environmental variables have been set."echo
  • 创建空文件

与重定向符>结合使用使用时,将会把一个文件清空,但是并不会修改这个文件的权限,如果之前这个文件并不存在,那么就创建这个文件

: > test.txt # 文件test.txt如果存在现在就被清空了,如果不存在就会被创建
# 这个命令与cat /dev/null > test.txt效果是一样的,但是实现过程不一样,应为后者需要创建一个进程来实现文件的创建或者清空,但是前者是bash的内建命令

与重定向操作符>>结合使用,将不会对预先存在的目标文件产生任何影响,如果这个文件之前并不存在,那么就创建它

当然:还可以用来做变量中的分隔符

注意:以上操作的文件只使用于正规的文件,而不适用于管道,符号连接,和某些特殊文件。

叹号,可以翻转测试操作符表达的意义,比如修改等号=为不等!=,还可以反转命令的退出码的结果,!操作符是Bash的关键字。

*

通配符,* 可以用来做文件名的匹配,这个东西也有个专有名词"通配符",含义就是可以用来匹配目录下的任何文件名。

也可以用与正则表达式中,用来表示匹配任一个数(包含0)的字符。

bash:/work/linux-sys/bash/2.基本/src$ echo *
case.sh char_cap.sh escape_character.sh multi_commond.sh testfile

*作为算术运算符时,指进行乘法的运算,如果要进行求幂的运算,需要使用**

?

测试操作符。在一个特定的表达式中,?用来测试一个条件的结果

在一个双括号结构中,?就是C语言的三元操作符。

在参数替换表达式中,?用来测试一个变量是否被set

通配符,?在通配中,用来做匹配的单个字符的"通配符",在正则表达式中也是用来表示一个字符

$

  • 变量替换--引用变量的内容,在一个变量前面加上$用来引用这个变量的值
  • 行结束符

在正则表达式中$表示行结束符

  • ${}

参数替换

  • $*, $@

位置参数

$?

退出状态吗变量,$?变量保存了一个命令,一个函数,或者是脚本本身的退出状态码

$$

进程ID变量,这个$$变量保存了它在脚本的进程ID

()

命令组,在括号中的命令列表,将会作为一个子shell来运行。在括号中的变量,由于是在子shell中,所以对于脚本上下的部分是不可用的

{xxx,yyy,zzz,...}

大括号扩展.

cat {file1,file2,file3} > combined_file
# 把file1, file2, file3连接在一起, 并且重定向到combined_file中.
cp file22.{txt,backup}
# 拷贝"file22.txt"到"file22.backup"中

注意:在大括号中, 不允许有空白, 除非这个空白被引用或转义

{}

代码块,即称为内部组,这个结构实时上创建了一个匿名函数,但是与标准函数不同的是在这个匿名函数中创建的变量对于其他部分的代码来说是可见的。

#!/bin/bash
# rpm-check.sh# 这个脚本的目的是为了描述, 列表, 和确定是否可以安装一个rpm包.
# 在一个文件中保存输出.
#
# 这个脚本使用一个代码块来展示.SUCCESS=0
E_NOARGS=65if [ -z "$1" ]
then
echo "Usage: `basename $0` rpm-file"
exit $E_NOARGS
fi{echoecho "Archive Description:"# 查询说明.echoecho "Archive Listing:"# 查询列表.echoif [ "$?" -eq $SUCCESS ]thenecho "$1 can be installed."elseecho "$1 cannot be installed."fiecho} > "$1.test"
# 把代码块中的所有输出都重定向到文件中.echo "Results of rpm test in file $1.test"# 查看rpm的man页来查看rpm的选项.exit 0

{} \;

路径名,配合find等使用,

# 在当前目录下,查找后缀为sh的文件,并执行chmod u+x对找到的文件加上可执行权限
find . -name '*.sh' -exec chmod u+x {} \;

[]

  • 条件测试,条件测试表达式放在[]中,该命令是shell内建命令的一部分,并不是/usr/bin/test中的外部命令的一个链接。
  • 数组元素
array[1]='a';
  • 字符范围

用于正则表达式的一部分,方括号描述一个匹配的字符范围

[[]]

测试,测试表达式放在[[]](shell关键字)

(())

整数扩展

扩展计算在(())中的整数表达式

> &> >> < <>

重定向

<<、<<<

用在here document中的重定向

<、>

大小比较

\<、\>

正则表达式中单词的边界

|

管道

>|

强制重定向,将覆盖一个现存的文件

||

条件表达式中,或逻辑操作

&

后台运行

&&

与-逻辑操作

-

  • 选项前缀,所有的命令内,如果向使用选项参数的话,其那边都要加上"-"
  • 用于重定向 stdinstdout [破折号, 即-].
# 1'-'后边的'f'(file)选项, 指明作为stdout的目标文件
# 2'f'后边跟'-',从stdin读取数据.
tar cf - . | (cd ../dest/directory; tar xpvf -)
  • 先前的工作目录,使用cd -将回到先前的工作目录
  • 减号操作符

=

等号,赋值操作,也可以用来做字符串比较等价于==

if [ "$a" = "$b" ]

+

加号。加法算术操作,也可以作为一种正则表达式的操作

作为选项时,某些命令使用+来表示打开特定的选型,使用-来标示禁用这些特定的选项

%

取模,一次除法的余数,算术操作,也可以是一种模式匹配的操作

~

代表home目录

~+

当前工作目录,相当于$PWD的内建命令

~-

先前的工作目录,相当于$OLDPWD的内部变量

^

行首,在正则表达式中^代表定位到文本行的行首

bash-shell中使用的特殊字符总结相关推荐

  1. linux bash and,linux bash shell中for的用法and示例

    关于linux bash shell中的for语句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循环命令,今天就介绍一下关于for的一些用 ...

  2. Bash Shell中16进制数字和ASCII字符相互转换

    Bash Shell中ASCII值和字符之间的转换 1.数值转换为ASCII字符 方法一: i=97echo $i | awk '{printf("%c", $1)}' 方法二: ...

  3. Bash Shell中命令行选项/参数处理

    http://www.cnblogs.com/FrankTan/archive/2010/03/01/1634516.html 0.引言 写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行 ...

  4. bash shell 中时间操作常用方法总结

    在日常的工作中,bash shell 的时间操作非常频繁.比如shell脚本定时发送数据统计的时候,会查看当前是否为预定的发送时间.或者使用文件保存一些数据时,一般会生成时间字符串当做文件名的一部分. ...

  5. linux shell 获取环境变量,bash shell中的环境变量

    环境变量--bash shell使用环境变量来存储系统相关数据,并允许将数据存储在内存中. 环境变量分为:全局环境变量 本地环境变量 目录全局环境变量 本地环境变量 设置全局环境变量 删除环境变量 P ...

  6. win10复制粘贴linux,如何在Windows 10的Bash Shell中启用复制和粘贴键盘快捷键 | MOS86...

    Windows 10s Bash shell终于有了方便的复制和粘贴键盘快捷键,但是出于兼容性原因,默认情况下将它们禁用. 这些快捷方式在2018年10月更新中可用,该更新最初代号为Redstone ...

  7. shell中sed -i特殊字符

    可参考文献: Linux生产环境上,最常用的一套"sed"技巧 看懂shell中的各种语句

  8. bash shell中的退出状态码

    shell中运行的每个命令都使用退出状态码告诉shell它已经运行完毕.提出状态码是一个0-255的整数值,在命令结束运行时有命令传给shell.可以捕获这个值并在脚本中使用. Linux提供了一个专 ...

  9. bash shell中expr命令下几种的使用

    expr在linux中是一个功能非常强大的命令.通过学习做一个小小的总结. 1.计算字符串的长度.我们可以用awk中的length(s)进行计算.我们也可以用echo中的echo ${#string} ...

  10. 刨根问底:linux中bash shell中SIGHUP和SIGTERM信号的处理

    新人最容易发生的事情就是用ssh客户端(比如xshell)登录服务器之后,用&在后台执行了命令,第二天兴致勃勃去看任务,发现已经被kill了.一开始我学到的知识是,运行的后台命令都需要nohu ...

最新文章

  1. windows7 64位机上配置支持GPU版(CUDA7.5)的OpenCV2.4.13操作步骤
  2. 比尔盖茨NEJM发文:新冠肺炎是百年一遇的流行病!全世界应该如何应对?
  3. 流量不够用?Facebook要帮你发现附近的免费WiFi
  4. Richard Feynman, 挑战者号, 软件工程,自顶而下
  5. granfana telegraf influx安装与使用
  6. javax.management.InstanceNotFoundException: com.alibaba.druid:type=DruidStatService ERROR com.aliba
  7. py提取文字中的时间_一次提取100个视频中的文案!节省时间有绝招在手视频文案提取...
  8. 史上最成功的数学预测:用狄拉克方程推导出电子自旋
  9. linux dhcp 绑定mac地址,●DHCP协议的功能是 (58) 。在Linux中提供DHCP服务的程序是 (59) ;DHCP服务将主机的MAC地址和IP地 - 赏学吧...
  10. clclickhouse与bitmap的结合
  11. 澄甫先生谓古人练拳分四步功夫
  12. 骑士CMS模版注入+文件包含getshell漏洞复现
  13. 采集上市公司信息的10个经典方法
  14. adobe reader XI打开大约十几秒就闪退问题解决方法大全
  15. QQ2005BIII网吧版修改方法(转)
  16. 借助 Material You 动态配色丰富您的应用
  17. 又一华尔街之狼?从洗碗工到公司董事长成功之路
  18. Ubuntu界面美化
  19. html往WPS粘贴格式乱,wps表格无法粘贴信息,原因是复制区域形状不同怎么解决?...
  20. android照片墙的实现

热门文章

  1. hdu 5367(线段树+区间合并)
  2. nylgACM_105_九的余数
  3. [JSOI2009]密码——AC自动机+记忆化搜索(状压)
  4. 使用numpy与matplotlib.pyplot画图
  5. [算法] 举一反三之n重复数组中找唯一m重复异类数
  6. Django的中间件
  7. 数论-扩展中国剩余定理
  8. cas中总是得不到返回的属性
  9. [转]python yield
  10. swfupload简单使用