linux中$符号的基础用法总结
linux使用版本:CentOS7
[root@azfdbdfsdf230lqdg1ba91~]#cat/etc/redhat-release CentOSLinuxrelease7.4.1708(Core) [root@azfdbdfsdf230lqdg1ba91~]#uname-a Linuxazfdbdfsdf230lqdg1ba913.10.0-693.2.2.el7.x86_64#1SMPTueSep1222:26:13UTC2017x86_64x86_64x86_64GNU/Linux [root@azfdbdfsdf230lqdg1ba91~]#
$符号草集
目标
$符号在linux系统的有着很多很重要的作用,特别是在编写bash脚本的时候,随处可见$的身影。由于他的千变万化,多种多样,使对他的掌握和使用,尤其是记忆带来了挑战,所以,现在,我们来一起将它的用法做一次汇总,形成草集。掌握他们不会让你工资大涨,因为面试不会问到,但是会提高你的工作效率,扩展你的视野
目前,我所知道的$用法有$、"$"、$0$1$n、$#、$@$*、$?、$()、${}、${#}、$[]、$-、$!、$$。额外!$,!!,依次详说
$获取变量值
$可获取变量的值
[root@izbp10lqlgy2g31s41bt94z~]#a=1 [root@izbp10lqlgy2g31s41bt94z~]#echo$a 1
"$"获取变量值时最好使用"括起来
为什么有这个建议呢,看实例
[root@izbp10lqlgy2g31s41bt94z~]#echogetvalueofa=$a getvalueofa=1 [root@izbp10lqlgy2g31s41bt94z~]#echo"getvalueofa=$a" getvalueofa=1
可以看到,有无"双引号括起来似乎效果是一样的。别早下结论,往下看
[root@izbp10lqlgy2g31s41bt94z~]#a="iamskyler" [root@izbp10lqlgy2g31s41bt94z~]#[$a=="iamskyler"] -bash:[:参数太多
这里解析下[],[]是条件判断符号,相当于test命令。他的意思是判断a变量的值是否等于"iamskyler"。
那么为什么会报错呢,因为[$a=="iamskyler"]这种写法变量解析后成为[iamskyler=="iamskyler"],很明显,这个判断式无法判断等号两边的字符串,我们想要的是["iamskyler"=="iamskyler"]的比较。所以平时我们在是name"
[root@izbp10lqlgy2g31s41bt94z~]#["$a"=="iamskyler"] [root@izbp10lqlgy2g31s41bt94z~]#echo$? 0
使用双引号后就可以了,这里提前用了下$?,他的意思是判断前一个命令执行结果是否正确。输出的结果中,0表示执行成功,非零值表示出错
${}用于区分变量的边界,明确告诉程序要取哪个变量的值
如下实例,不加{}程序无法判断ab$abc哪个是变量,无法解析
[root@izbp10lqlgy2g31s41bt94z~]#echo"getvalueofa=$abc" getvalueofa= [root@izbp10lqlgy2g31s41bt94z~]#echo"getvalueofa=${a}bc" getvalueofa=1bc [root@izbp10lqlgy2g31s41bt94z~]#
${#}获取变量值的长度
[root@izbp10lqlgy2g31s41bt94z~]#echo"getlengthofa=${#a}" getlengthofa=1 [root@izbp10lqlgy2g31s41bt94z~]#a=11111 [root@izbp10lqlgy2g31s41bt94z~]#echo"getlengthofa=${#a}" getlengthofa=5 [root@izbp10lqlgy2g31s41bt94z~]#a=skyler [root@izbp10lqlgy2g31s41bt94z~]#echo"getlengthofa=${#a}" getlengthofa=6 [root@izbp10lqlgy2g31s41bt94z~]#
$0$1$n获取文件名称和参数值,一般在bash脚本中较多
$0表示shell脚本文件名;从1开始表示第几个参数,1表示第一个参数。这里我们创建一个test.sh可执行文件
创建一个test.sh文件并填充代码 [root@izbp10lqlgy2g31s41bt94z~]#echo'echo$0$1$2'>test.sh [root@izbp10lqlgy2g31s41bt94z~]#cattest.sh echo$0$1$2 执行test.sh并传入变量 [root@izbp10lqlgy2g31s41bt94z~]#shtest.shiamskyler test.shiam
可以看到,三个参数中前两个打印出来了,因为我们没有声明$3,所有打印出了文件名称和前两个参数
$#获取参数数量
[root@izbp10lqlgy2g31s41bt94z~]#echo'echo$#$0$1'>test.sh [root@izbp10lqlgy2g31s41bt94z~]#cattest.sh echo$#$0$1 [root@izbp10lqlgy2g31s41bt94z~]#shtest.shIamashuashua 4test.shI
$@$*数组的形式引用参数列表
它们的区别在于使用双引号括起来用时,假设传入的参数为123,那么"*的值为”123”一个变量
test.sh echo'$@的数组参数格式' forxin"$@" do echo+$x done echo'$*的数组参数格式' forxin"$*" do echo+$x done root@izbp10lqlgy2g31s41bt94z:~#shtest.sh123 $@的数组参数格式 +1 +2 +3 $*的数组参数格式 +123
$?判断上一个命令执行是否成功
执行成功值时0,失败是非0
[root@izbp10lqlgy2g31s41bt94z~]#ll 总用量172 -rw-r--r--1rootroot493922月252019hs_err_pid24203.log -rw-r--r--1rootroot494252月132019hs_err_pid25726.log [root@izbp10lqlgy2g31s41bt94z~]#echo$? 0 [root@izbp10lqlgy2g31s41bt94z~]#caff -bash:ca:未找到命令 [root@izbp10lqlgy2g31s41bt94z~]#echo$? 127
$()等同于使用双引号的作用
略
$[]表达式计算
此时的[]不是用于判断式的场景,[]作为判断式一般用于bash脚步中ifwhile等条件语句
[root@izbp10lqlgy2g31s41bt94z~]#echo$[5+5] 10
$-显示shell所使用的当前选项
[root@izbp10lqlgy2g31s41bt94z~]#echo$- himBH 解释:himBH每一个字符是一个shell的选项,详情manbash然后搜索-h-B等。详情参考:http://kodango.com/explain-shell-default-options
$!获取后台运行最后一个进程的pid,更多应用在bash脚本
[root@izbp10lqlgy2g31s41bt94z~]#cattest.sh& [1]362 [root@izbp10lqlgy2g31s41bt94z~]#echo$#$0$1 ^C [1]+完成cattest.sh [root@izbp10lqlgy2g31s41bt94z~]#echo$! 362
!$将上一条命令的参数传递给下一条命令的参数,平时用于更方便,更多应用在bash脚本
[root@izbp10lqlgy2g31s41bt94z~]#cd/Users/skyler/project/test [root@izbp10lqlgy2g31s41bt94z~]#ll!$ [root@izbp10lqlgy2g31s41bt94z~]#ll/Users/skyler/project/test 362
!!将上一条命令输出,平时用于更方便,更多应用在bash脚本
[root@izbp10lqlgy2g31s41bt94z~]#!! [root@izbp10lqlgy2g31s41bt94z~]#ll/Users/skyler/project/test
$$获取当前进程pid
[root@izbp10lqlgy2g31s41bt94z~]#echo$$ 31268 [root@izbp10lqlgy2g31s41bt94z~]#ps-ef|grep31268 root3126831266008:10pts/000:00:00-bash
当前的进程是bash,pid是31268
平日多加练习,用时随心索取
段进行分页拉取也是可以达到效果的,具体还是要由业务场景来定。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。