shell脚本中$!、$@、$#、$$、$0、$1、$2、$*的含义
一、shell脚本中$!、$@、$#、$$、$0、$1、$2、$*的含义
$! :Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)
$#:添加到shell当中参数的个数
$$:Shell本身的PID(ProcessID,即脚本运行的当前进程ID号)
$0:脚本本身的文件名
$1:传到Shell当中的第一个参数
$2:传到Shell当中的第二个参数
$*:所有参数列表。如$*用" "括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个;若不加" ",那么$*与$@的输出结果相同
$@:所有参数列表。如$@用" "括起来的情况、以"$1" 、"$2"、 … "$n" 的形式输出所有参数。
脚本举例:
echo "number:" $# echo "PID:" $$ echo "sname:" $0 echo "first:" $1 echo "second:" $2 echo $@ echo $* echo "" echo "==========" n=1 for i in "$@" do echo "$n : " $i let n+=1 done echo "" echo "==========" n=1 for i in "$*" do echo "$n : " $i let n+=1 done echo "" echo "==========" n=1 for i in $* do echo "$n : " $i let n+=1 done
结果:
# ./value.sh 1 2 3 4
number: 4
PID: 5445
sname: ./value.sh
first: 1
second: 2
1 2 3 4
1 2 3 4
==========
1 : 1
2 : 2
3 : 3
4 : 4
==========
1 : 1 2 3 4
==========
1 : 1
2 : 2
3 : 3
4 : 4
分析:
$#:传给脚本的参数个数
$$:脚本自己的PID号
$0:脚本自身的名字
$1 ~ $n:参数1 ~ 参数n
$@与$*的区别:
$@与$*都可以使用一个变量来来表示所有的参数内容,但这两个变量之间有一些不同之处。
$@:将输入的所有参数作为一个列表对象
$*:将输入的所有参数作为一个变量
在上面的例子中,使用$@与$*是,都是用双引号引起来,但当$*不使用双引号时,结果与$@的结果相同。
二、关于$?
$?:获取函数的返回值或者上一个命令的退出状态 。如果成功就是0,失败为1。
在脚本中,我们常用if [ $? -eq 0 ] 来判断一个命令有没有执行成功。
示例:
ps -fe | grep test | grep -v grep if [ $? -eq 0 ] then echo "Process test is running!" else echo "Process test don not run!" fi
注意,if后面的中括号[ $? -eq 0 ],括号的两边各需要有一个空格。
原文:https://blog.csdn.net/csdnxmj/article/details/103978774
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2020-07-06 mysql+ftp+shell脚本自动实现数据库的备份