linux中$符号的基础用法总结

 更新时间:2019年11月12日 08:34:55   作者:skyler  
这篇文章主要给大家介绍了关于linux中$符号的基础用法,文中通过示例代码介绍的非常详细,对大家学习或者使用linux系统具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

linux使用版本: CentOS 7

[root@azfdbdfsdf230lqdg1ba91 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@azfdbdfsdf230lqdg1ba91 ~]# uname -a
Linux azfdbdfsdf230lqdg1ba91 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@azfdbdfsdf230lqdg1ba91 ~]#

$符号草集

目标

$符号在linux系统的有着很多很重要的作用,特别是在编写bash脚本的时候,随处可见$的身影。由于他的千变万化,多种多样,使对他的掌握和使用,尤其是记忆带来了挑战,所以,现在,我们来一起将它的用法做一次汇总,形成草集。掌握他们不会让你工资大涨,因为面试不会问到,但是会提高你的工作效率,扩展你的视野

目前,我所知道的$用法有$、”$”、$0 $1 $n、$#、$@ $*、$?、$()、${}、${#}、$[]、$-、$!、$$。额外!$,!!,依次详说

$ 获取变量值

$可获取变量的值

[root@izbp10lqlgy2g31s41bt94z ~]# a=1
[root@izbp10lqlgy2g31s41bt94z ~]# echo $a
1

“$” 获取变量值时最好使用”括起来

为什么有这个建议呢,看实例

[root@izbp10lqlgy2g31s41bt94z ~]# echo get value of a = $a
get value of a = 1
[root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = $a"
get value of a = 1

可以看到,有无”双引号括起来似乎效果是一样的。别早下结论,往下看

[root@izbp10lqlgy2g31s41bt94z ~]# a="i am skyler"
[root@izbp10lqlgy2g31s41bt94z ~]# [ $a == "i am skyler" ]
-bash: [: 参数太多

这里解析下[],[]是条件判断符号,相当于test命令。他的意思是判断a变量的值是否等于”i am skyler”。
那么为什么会报错呢,因为[ $a == “i am skyler”]这种写法变量解析后成为[ i am skyler == “i am skyler” ],很明显,这个判断式无法判断等号两边的字符串,我们想要的是[ “i am skyler” == “i am skyler” ]的比较。所以平时我们在是name”

[root@izbp10lqlgy2g31s41bt94z ~]# [ "$a" == "i am skyler" ]
[root@izbp10lqlgy2g31s41bt94z ~]# echo $?
0

使用双引号后就可以了,这里提前用了下$?,他的意思是判断前一个命令执行结果是否正确。输出的结果中,0表示执行成功,非零值表示出错

${}用于区分变量的边界,明确告诉程序要取哪个变量的值

如下实例,不加{}程序无法判断ab $abc哪个是变量,无法解析

[root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = $abc"
get value of a =
[root@izbp10lqlgy2g31s41bt94z ~]# echo "get value of a = ${a}bc"
get value of a = 1bc
[root@izbp10lqlgy2g31s41bt94z ~]#

${#}获取变量值的长度

[root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}"
get length of a = 1
[root@izbp10lqlgy2g31s41bt94z ~]# a=11111
[root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}"
get length of a = 5
[root@izbp10lqlgy2g31s41bt94z ~]# a=skyler
[root@izbp10lqlgy2g31s41bt94z ~]# echo "get length of a = ${#a}"
get length of a = 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 ~]# cat test.sh
echo $0 $1 $2

执行test.sh 并传入变量
[root@izbp10lqlgy2g31s41bt94z ~]# sh test.sh i am skyler
test.sh i am

可以看到,三个参数中前两个打印出来了,因为我们没有声明$3,所有打印出了文件名称和前两个参数

$# 获取参数数量

[root@izbp10lqlgy2g31s41bt94z ~]# echo 'echo $# $0 $1' > test.sh
[root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh
echo $# $0 $1
[root@izbp10lqlgy2g31s41bt94z ~]# sh test.sh I am a shuashua
4 test.sh I

$@ $* 数组的形式引用参数列表

它们的区别在于使用双引号括起来用时,假设传入的参数为1 2 3,那么”*的值为”1 2 3”一个变量

test.sh
echo '$@的数组参数格式'
for x in "$@"
do
 echo + $x
done
echo '$*的数组参数格式'
for x in "$*"
do
 echo + $x
done

root@izbp10lqlgy2g31s41bt94z:~# sh test.sh 1 2 3
$@的数组参数格式
+ 1
+ 2
+ 3
$*的数组参数格式
+ 1 2 3

$? 判断上一个命令执行是否成功

执行成功值时0,失败是非0

[root@izbp10lqlgy2g31s41bt94z ~]# ll
总用量 172
-rw-r--r-- 1 root root 49392 2月 25 2019 hs_err_pid24203.log
-rw-r--r-- 1 root root 49425 2月 13 2019 hs_err_pid25726.log
[root@izbp10lqlgy2g31s41bt94z ~]# echo $?
0
[root@izbp10lqlgy2g31s41bt94z ~]# ca ff
-bash: ca: 未找到命令
[root@izbp10lqlgy2g31s41bt94z ~]# echo $?
127

$() 等同于使用双引号的作用

$[] 表达式计算

此时的[]不是用于判断式的场景,[]作为判断式一般用于bash脚步中if while等条件语句

[root@izbp10lqlgy2g31s41bt94z ~]# echo $[5 + 5]
10

$- 显示shell所使用的当前选项

[root@izbp10lqlgy2g31s41bt94z ~]# echo $-
himBH

解释:himBH每一个字符是一个shell的选项,详情man bash然后搜索 -h -B 等。详情参考:kodango.com/explain-shell-default-options

$! 获取后台运行最后一个进程的pid,更多应用在bash脚本

[root@izbp10lqlgy2g31s41bt94z ~]# cat test.sh &
[1] 362
[root@izbp10lqlgy2g31s41bt94z ~]# echo $# $0 $1
^C
[1]+ 完成     cat test.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|grep 31268
root  31268 31266 0 08:10 pts/0 00:00:00 -bash

当前的进程是bash,pid是31268

平日多加练习,用时随心索取

段进行分页拉取也是可以达到效果的,具体还是要由业务场景来定。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对华域联盟的支持。

相关文章

  • 简单测试Apache是如何完成负载均衡策略配置

    简单测试Apache是如何完成负载均衡策略配置

    公司的系统在最初设计的时候就已经考虑到了负载均衡的规划,此次 就是对负载均衡的一个简单测试

    2014-01-01

  • Vim命令高级用法

    Vim命令高级用法

    一些高级的Vim命令用法:同时编辑多个文件、文本重排、域操作、缓冲区的使用等命令。

    2013-11-11

  • 如何在Linux中修改tomcat端口号

    如何在Linux中修改tomcat端口号

    这篇文章主要介绍了如何在Linux中修改tomcat端口号,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    2020-05-05

  • Apache 认证总结

    Apache 认证总结

    经常上网的读者会遇到这种情况:访问一些网站的某些资源时,浏览器弹出一个对话框,要求输入用户名和密码来获取对资源的访问。

    2009-05-05

  • CentOS 配置无密码登录的实现

    CentOS 配置无密码登录的实现

    这篇文章主要介绍了CentOS 配置无密码登录的实现的相关资料,需要的朋友可以参考下

    2017-06-06

  • linux中误删除程序包恢复实例

    linux中误删除程序包恢复实例

    Linux 下的文件一旦被删除,是难以恢复的。对于家庭单机使用的Linux ,或者误删文件后及时补救,还是可以恢复的。下面就来介绍一下。

    2016-10-10

  • Hbase入门详解

    Hbase入门详解

    今天小编就为大家分享一篇关于Hbase入门详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    2019-01-01

  • 修改linux文件权限命令:chmod命令详解

    修改linux文件权限命令:chmod命令详解

    本篇文章主要介绍了修改linux文件权限命令:chmod,Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。

    2016-12-12

  • 在CentOS 6 中安装WordPress(一) 安装Apache,Mysql, PHP环境

    在CentOS 6 中安装WordPress(一) 安装Apache,Mysql, PHP环境

    最近做个项目,拿到一台CentOS 6服务器,需要在上面配置php环境,并安装WordPress,我们先来看看第一步,配置AMP(Apache,Mysql, PHP)环境

    2014-06-06

  • Linux VPS安全设置之三:使用DDOS deflate抵御少量DDOS攻击

    Linux VPS安全设置之三:使用DDOS deflate抵御少量DDOS攻击

    这篇文章主要介绍了Linux VPS安全设置之三:使用DDOS deflate抵御少量DDOS攻击,需要的朋友可以参考下

    2016-10-10

最新评论

声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。