Shell 必知必会 | 二、你需要的 Shell 特殊字符都在这里!

2024-05-29 18:18

本文主要是介绍Shell 必知必会 | 二、你需要的 Shell 特殊字符都在这里!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  目录

一、Shell 特殊字符

1.1 $N 

1.2 $#

1.3 $*

1.5 $?

1.6 $$

1.7 $!

1.8 $-

二、总结


在写 Shell 脚本的时候,通常会使用到一些特殊字符,比如:$?、$@等,这篇文章将结合实例介绍所有的 Shell 特殊字符,建议先收藏哦!

一、Shell 特殊字符

1.1 $N 

N 代表一个数字,其中,$0 表示当前脚本文件名,$N (N > 0)表示输入到脚本中的第 N 个输入参数,如下所示:

[root@localhost ~]# cat shell.sh
#!/bin/bashecho $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}[root@localhost ~]# ./shell.sh 1 2 3 4 5 6 7 8 9 10
./shell.sh 1 2 3 4 5 6 7 8 9 10
[root@localhost ~]#

注意:$0 输出的是 ./shell.sh。

1.2 $#

传递给脚本或函数的参数个数,如下所示:

[root@localhost ~]# cat shell.sh
#!/bin/bashecho $#
[root@localhost ~]# ./shell.sh 1 2 3
3
[root@localhost ~]#
[root@localhost ~]# cat shell.sh 
#!/bin/bashfuncTest() {echo $#
}funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh 
4
[root@localhost ~]# 

1.3 $*

 表示传递给脚本或函数的所有参数,如下所示:

[root@localhost ~]# cat shell.sh 
#!/bin/bashecho $*
[root@localhost ~]# ./shell.sh 1 2 3 4 5
1 2 3 4 5
[root@localhost ~]#
[root@localhost ~]# cat shell.sh 
#!/bin/bashfuncTest() {echo $*
}funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh 
1 2 3 4
[root@localhost ~]#

1.4 $@

表示传递给脚本或函数的所有参数,如下所示:

[root@localhost ~]# cat shell.sh 
#!/bin/bashecho $@
[root@localhost ~]# ./shell.sh 1 2 3 4 5
1 2 3 4 5
[root@localhost ~]#
[root@localhost ~]# cat shell.sh 
#!/bin/bashfuncTest() {echo $@
}funcTest 1 2 3 4
[root@localhost ~]# ./shell.sh 
1 2 3 4
[root@localhost ~]#

 $@$* 的区别:

  • 当不被双引号包含时,两个符号没区别,都以 $1 $2 $3 ……分开的形式输出;
  • 当被双引号包含时,$*会将所有参数作为一个整体输出,例如:"$1 $2 $3 ……",而 $@ 会将各个参数分开,例如:$1 $2 $3 ……;

下面通过例子看下:

先看下没区别的情况,如下所示:

[root@localhost ~]# cat shell.sh 
#!/bin/bashecho "\$*"
for i in $*
doecho $i
doneecho "\$@"
for i in $@
doecho $i
done
[root@localhost ~]# ./shell.sh 1 2 3 4 5
$*
1
2
3
4
5
$@
1
2
3
4
5
[root@localhost ~]#

再看下有区别的情况,如下所示:

[root@localhost ~]# cat shell.sh 
#!/bin/bashecho "\$*"
for i in "$*"
doecho $i
doneecho "\$@"
for i in "$@"
doecho $i
done
[root@localhost ~]# ./shell.sh 1 2 3 4 5
$*
1 2 3 4 5
$@
1
2
3
4
5
[root@localhost ~]# 

在上面的例子中,被双引号包含的 $* 里包含的所有参数被看做一个整体了,直接输出了 “1 2 3 4 5”,而 $@ 里的参数还是分开的。

1.5 $?

表示上个命令的退出状态或函数的返回值,如下所示:

[root@localhost ~]# cat shell.sh 
#!/bin/bashpwd
echo $?ls -l /root/abc
echo $?
[root@localhost ~]# ./shell.sh 
/root
0
ls: 无法访问/root/abc: 没有那个文件或目录
2
[root@localhost ~]#

第一处 $? 的值为 0,表示命令 pwd 执行成功;第二处 $? 的值为 2,表示上个命令 ls 执行失败。

[root@localhost ~]# cat shell.sh 
#!/bin/bashfuncTest(){return 6
}funcTest
echo $?
[root@localhost ~]# ./shell.sh 
6
[root@localhost ~]#
[root@localhost ~]# cat shell.sh 
#!/bin/bashfuncTest(){echo "abc"
}val=$(funcTest)
echo $?
[root@localhost ~]# ./shell.sh 
0
[root@localhost ~]#

当 $? 用在函数上,如果有 return 语句,则获取的是 return 语句返回的值,范围是0~255。如果没有 return 语句,$? 的值表示函数中最后执行的那个命令的返回代码。

1.6 $$

表示脚本当前进程的 ID 号,如下所示: 

[root@localhost ~]# cat shell.sh 
#!/bin/bashecho $$
[root@localhost ~]# ./shell.sh 
26033
[root@localhost ~]# 

1.7 $!

表示后台最后运行的进程的 ID 号,也可以理解为最近运行的进行的 ID 号,不一定是结束的。

[root@localhost ~]# top &
[2] 31702
[root@localhost ~]# echo $!
31702[2]+  已停止               top
[root@localhost ~]#

1.8 $-

显示Shell命令使用的当前选项,与 set 命令功能相同,如下所示:

[root@localhost ~]# cat shell.sh 
#!/bin/bashset -m
echo $-set -C
echo $-
[root@localhost ~]# ./shell.sh 
hmB
hmBC
[root@localhost ~]#

 注意:在第二次输出的时候多了刚刚设置的参数 C。

二、总结

好了,Shell 特殊字符结合实例讲解完了,感觉不错就一键三连吧,有问题欢迎在评论区留言~

这篇关于Shell 必知必会 | 二、你需要的 Shell 特殊字符都在这里!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014277

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CSS样式(2)、方式二:JS 3. 控制二三级数据隐藏与显示--绑定styl

站长常用Shell脚本整理分享(全)

站长常用Shell脚本整理分享 站长常用Shell脚本整理分享1-10 站长常用Shell脚本整理分享11-20 站长常用Shell脚本整理分享21-30 站长常用Shell脚本整理分享31-40 站长常用Shell脚本整理分享41-50 站长常用Shell脚本整理分享51-59 长期更新

Shell脚本实现自动登录服务器

1.登录脚本 login_server.sh #!/bin/bash# ReferenceLink:https://yq.aliyun.com/articles/516347#show all host infos of serverList.txtif [[ -f ./serverList.txt ]]thenhostNum=`cat ./serverList.txt | wc -l`e

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

[轻笔记]ubuntu shell脚本切换conda环境

source /home/yourhostname/anaconda3/etc/profile.d/conda.sh # 关键!!!conda activate env_name

[轻笔记] ubuntu Shell脚本实现监视指定进程的运行状态,并能在程序崩溃后重启动该程序

根据网上博客实现,发现只能监测进程离线,然后对其进行重启;然而,脚本无法打印程序正常状态的信息。自己通过不断修改测试,发现问题主要在重启程序的命令上(需要让重启的程序在后台运行,不然会影响监视脚本进程,使其无法正常工作)。具体程序如下: #!/bin/bashwhile [ 1 ] ; dosleep 3if [ $(ps -ef|grep exe_name|grep -v grep|

插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV

然后粘贴: <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.26</version> </dependency>