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

相关文章

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

Linux实现简易版Shell的代码详解

《Linux实现简易版Shell的代码详解》本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS–Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解Shell工作原理的迷你Sh... 目录一、程序流程分析二、代码实现1. 打印命令行提示符2. 获取用户输入的命令行3. 命令行解析4. 执行命令

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S