设为首页 收藏本站
查看: 810|回复: 0

Bash Shell 中的特殊字符

[复制链接]

尚未签到

发表于 2018-8-29 11:38:02 | 显示全部楼层 |阅读模式
  什么是Bash Shell中的特殊字符?某些特殊字符在Bash Shell里不是表示其字符含义本身,而是另有含义,称为:meta-meaning。

  •   1.字符:#
  代表注释,如果有一行以#开始,那么意味着这行不会被执行,只是一行说明注释。
  例如:
# this is comments  这是一行注释。
  但是这里有个例外,那就是脚本的第一行我们经常看到的:
#!/bin/bash  这个指示一个脚本的解释器,说明这个脚本是由/bin/bash 来解释的。
  从#为开始,后面的字符即为注释,直到该行结束。体会下面几个例子:
echo "The # here does not begin a comment."  
echo 'The # here does not begin a comment.'
  引用内的字符按原意输出。
echo The \# here does not begin a comment.  这个使用了\把#做了转义,即把#原样输出。
echo The # here begins a comment.  这个惨了,被截断了,只输出: The
echo ${PATH#*:}  这个是参数替换,不是注释符。
echo $(( 2#101011 ))  这个是基数指示符,也不是注释符,说明后面的数是二进制的。

  •   2.字符:;
  分号[semicolon],作为命令的分割符,说明一条命令到此结束。使用分号,你可以在一行写多条命令,这个我们经常见。
  例如:
hdfeel$ echo hello; echo world;  
hello
  
world
  
hdfeel$
  3.字符:;;
  两个分号在一起[double semicolon],这个只用在case语句里:
case "$variable" in  
  abc)  echo "\$variable = abc" ;;
  
  xyz)  echo "\$variable = xyz" ;;
  
esac

  •   4.字符:"
  双引号[double quote]表示部分引用[partial quoting],多数情况下,双引号内的字符原样输出,但其中的变量会被替换。比如:
hdfeel$ fileName="a.txt"  
hdfeel$ echo "the file name is $fileName"
  
hdfeel$ the file name is a.txt
  这可能正是我们需要的。如果你想原样输出,那么用单引号,或者使用反斜杠\对$进行转义。
echo "the file name is \$fileName"  
echo 'the file name is $fileName'

  •   5.字符:’
  单引号[single quote],代表全引用[full quoting],引号内的字符全部原样输出,即使有变量也不做相应的替换。
  例子上面有了,不再重复了。

  •   6.字符:,
  逗号[comma operator],连接2个算式,但是只有最后一个算式的值被返回。
hdfeel$ let "t2 = ((a = 9, 15 / 3))"  上面的语句把a赋值为9,并把15除以3的结果5,赋值给t2.
  另外,逗号操作符,也可以连接字符串:
for file in /{,usr/}bin/*calc  
#             ^    在/bin和/usr/bin目录里,找出所有以"calc"结尾的可执行文件
  
#+
  
do
  
        if [ -x "$file" ]
  
        then
  
          echo $file
  
        fi
  
done
  
# /bin/ipcalc
  
# /usr/bin/kcalc
  
# /usr/bin/oidcalc
  
# /usr/bin/oocalc

  •   7.字符:
  反斜杠[backslash]就是换码符[escape],为单个字符的引用机制,通过对字符的引用来改变它本来的含义。
  比如:
hdfeel$ echo "\"";   // 输出双引号  
hdfeel$ "
  
hdfeel$ x=abc
  
hdfeel$ echo “$x”   // 输出变量的值
  
hdfeel$ abc
  
hdfeel$ echo “\$x”  // 原样输出
  
hdfeel$ $x

  •   8.字符:`
  命令替换符,就是键盘的左上角波浪符下面的字符,不要看错了,不是单引号噢,`中间放一个可执行的命令`,这个符号也叫反引号。
  举个小例子:
#! /bin/bash  
inFile=“example.txt"
  
maxLen=12
  
#
  
while read line; do
  
    len=`echo $line | awk '{print length($0)}'`    //  子命令被放到了反引号里面执行。
  
    if [ $len -lt $maxLen ]; then
  
        echo $line
  
    fi
  
done < $inFile
  上面的程序打印出了少于12个字符的行。

  •   9.冒号:
  冒号[colon],称为空命令[null command],即什么都不执行,返回值为true,也就是0,属于Bash的内置命令。
  下面2段代码把冒号当成了判断条件:
while :  
do
  
   operation-1
  
   operation-2
  
   ...
  
   operation-n
  
done
  和上面的代码实现一样的功能
while true  
do
  
   operation-1
  
   operation-2
  
   ...
  
   operation-n
  
done
  有时它也被用来当占位符:
if condition  
then :   # Do nothing and branch ahead
  
else     # Or else ...
  
   take-some-action
  
fi
  冒号:也用来当作域分隔符,你在/etc/passwd和$PATH变量中可以看到它:
shells hdfeel$ echo $PATH  
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  
shells hdfeel$
  最糟心的时,冒号这东西还可以做函数名,如果想让代码把人搞晕的话,这么搞
:()  
{
  
  echo "The name of this function is "$FUNCNAME" "
  
  # Why use a colon as a function name?
  
  # It's a way of obfuscating your code.
  
}
  
:
  
# The name of this function is :
  当然在函数内部,它可以做一个占位符,这样函数就不是一个空函数了。
not_empty ()  
{
  
  :
  
} # Contains a : (null command), and so is not empty.
  下面的这个比较实用:
  {a..z} 生成字符a到z之间的所有字符,当然也可以是数字,比如:{1..9}
  体会下这个代码
echo {a..z} # a b c d e f g h i j k l m n o p q r s t u v w x y z  
# Echoes characters between a and z.
  
echo {0..3} # 0 1 2 3
  
# Echoes characters between 0 and 3.
  
base64_charset=( {A..Z} {a..z} {0..9} + / = )
  
# Initializing an array, using extended brace expansion.
  
# From vladz's "base64.sh" example script.
  上面解释了一些Bash Shell中的部分特殊字符,在

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-558134-1-1.html 上篇帖子: shell命令的总结一之文件管理 下篇帖子: Linux——Shell脚本的基本应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表