linux中shell编程详解(理一理Linux中Shell编程的)
谈一谈Linux中Shell编程的转义和引用
Shell中的两类字符
(1)、普通字符:
Shell中除了本身的字面意思外没有其他特殊意义。
(2)、元字符:
Shell的保留字符,在Shell中有着特殊意义的专用字符。
1、转义
指使用转义符引用单个字符,从而使其表达单纯的字符的字面含义。
Shell中的转义符是反斜杠"\",使用转义符的目的是使转义符后面的字符单纯地作为字符出现,而不解释其特殊的含义。
案例1:
[root@localhost odysee]# name=odysee
[root@localhost odysee]# echo ${name}
odysee
[root@localhost odysee]# echo \${name}
${name}
解释:
echo ${name}:
"$"作为一个特殊的字符,Shell解释为"取出并打印name变量的值"。
案例2:
*:
一般作为的通配符使用。
例如:
查找odysee 的sh结尾的所有文件
find ~odysee/ -name "*.sh"
我现在需要它作为一个普通的*
例如:
echo 9\*9 = 81
这里就作为一个普通的字符来使用
2、 引用
指字符串用某种符号括起来,以防止特殊字符被解析为其他意思。
Shell中的4种引用符
""[双引号]:
又叫"部分引用"或"弱引用",可以引用出除$、``、\之外的所有字符。
即:$、反引号(`)、转义符(\)特殊字符依然会被解析为特殊意义。
''[单引号]:
又叫"全引用"或"强引用",可以引用所有字符。
即:所有的特殊字符都不会被shell解释。
``[反引号]:
将反引号括起来的内容解释为系统命令。
也是命令替换的一种,将命令的标准输出作为值赋给某个变量。
最后有补充。
\[转义符]:
转义符引用单个字符,从而使其表达单纯的字符的字面含义。
案例1:
测试双引号
[root@localhost home]# num=9527
[root@localhost home]# echo "${num}"
9527
[root@localhost home]# echo "\${num}"
${num}
[root@localhost home]# echo "`ls`"
odysee
stephen
userShell
比较简单,就解释一下echo "`ls`"
echo "`ls`":
""内的``依然表示特殊的含义,提取ls命令执行后的结果,然后在echo出来。
案例2:
测试单引号
[root@localhost home]# count=9527
[root@localhost home]# echo '${count}'
${count}
[root@localhost home]# echo '\${count}'
\${count}
单引号里面的所有的特殊字符都不会被shell解释。
案例3:
测试反引号
[root@localhost home]# echo `ls ~/`
anaconda-ks.cfg Desktop Documents Downloads General Music original-ks.cfg Pictures Public Templates Videos
[root@localhost home]#
提取ls ~命令执行后的结果,然后在echo出来。
3、 命令替换
指将命令的标准输出作为值赋给某个变量,Shell编程中使用比较频繁。
例如:
count=`ls ~/`或者count=$(ls ~/)
将ls ~/执行的结果赋值给count变量。
命令替换的两种方式:
(1)、反引号
(2)、$()
案例:
[root@localhost home]# count=`ls ~/`
[root@localhost home]# echo ${count}
anaconda-ks.cfg Desktop Documents Downloads General Music original-ks.cfg Pictures Public Templates Videos
[root@localhost home]# num=$(ls ~/)
[root@localhost home]# echo ${num}
anaconda-ks.cfg Desktop Documents Downloads General Music original-ks.cfg Pictures Public Templates Videos
[root@localhost home]#
这两者执行的结果是相同的
测试完成。
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com