[Shell]特殊变量$0$#$*$@$?和命令行参数

简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/73302312 1. 参数变量特殊变量列表变量含义$0当前脚本的文件名$n传递给脚本或函数的参数。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/73302312

1. 参数变量

特殊变量列表

变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

Example:

#!/usr/bin/env bash
echo "脚本的文件名: $0"
echo "脚本第一个参数 : $1"
echo "脚本第二个参数 : $2"
echo "脚本所有参数: $@"
echo "脚本所有参数: $*"
echo "脚本参数个数 : $#"

输出:

xiaosi@yoona:~/code/openDiary/BaseOperation/src/main/sh$ sh sh_params.sh hotel vacation flight
脚本的文件名: sh_params.sh
脚本第一个参数 : hotel
脚本第二个参数 : vacation
脚本所有参数: hotel vacation flight
脚本所有参数: hotel vacation flight
脚本参数个数 : 3

2. $* 与 $@ 区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,但是两者之间是有区别的:

(1) $*,$@ ,均以 "$1" "$2" … "$n" 的形式输出

(2) "$", "$@" ,但是"$" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;而"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数

Example:

echo "\$*=" $*
echo "\"\$*\"=" "$*"
echo "\$@=" $@
echo "\"\$@\"=" "$@"
echo "-------------------------"
echo "print each param from \$*"
for var in $*
do
    echo "$var"
done
echo "-------------------------"
echo "print each param from \$@"
for var in $@
do
    echo "$var"
done
echo "-------------------------"
echo "print each param from \"\$*\""
for var in "$*"
do
    echo "$var"
done
echo "-------------------------"
echo "print each param from \"\$@\""
for var in "$@"
do
    echo "$var"
done

输出:

$*= a b c
"$*"= a b c
$@= a b c
"$@"= a b c
-------------------------
print each param from $*
a
b
c
-------------------------
print each param from $@
a
b
c
-------------------------
print each param from "$*"
a b c
-------------------------
print each param from "$@"
a
b
c

3. $? 退出状态

$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。不过,也有一些命令返回其他值,表示不同类型的错误。

sh xxx.sh
res=$?
if [[ ${res} -ne 0 ]]
then
    echo "---------------------------------------脚本执行不成功"
    exit 1
fi
目录
相关文章
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
289 2
|
7月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
156 18
|
9月前
|
缓存 Shell 开发工具
[oeasy]python064_命令行工作流的总结_vim_shell_python
本文总结了命令行工作流中的关键工具和操作,包括vim、shell和Python。主要内容如下: 1. **上次回顾**:完成了输入输出的代码编写,并再次练习了vim的使用。 2. **shell基础**:介绍了shell环境及其基本命令,如`pwd`、`cd`、`ll -l`等。 3. **Python游乐场**:通过`python3`命令进入Python交互环境,可以进行简单计算和函数调用,常用函数有`help`、`ord`、`chr`等。 4. **vim编辑器**:详细讲解了vim的三种模式(正常模式、插入模式、底行命令模式)及其切换方法,以及常用的底行命令如`:w`、`:q`、`
201 15
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
1574 7
|
存储 Java Shell
Shell 变量
10月更文挑战第2天
142 1
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
Java Shell Linux
Shell 变量设置
Shell设置变量
194 5
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
559 1
|
分布式计算 大数据 Shell
MaxCompute产品使用合集之odps shell如何将ech变量的结果集合写入文件,并且指定服务器的位置
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
155 10
|
Java Shell Linux
Shell 变量设置25-1
Shell编程语言是一种非类型的解释型语言,无需像C++/Java那样事先声明变量。通过赋值即可定义变量,在Linux支持的所有Shell中均适用。变量分为局部变量与环境变量,前者仅限于定义脚本内使用,后者可在其派生的子进程中使用。常见系统变量如$0表示当前程序名称,$n表示第n个参数(n=1,2,...,9),$*代表所有参数,$#代表参数个数,$?表示命令执行后的状态(0为成功),$UID为当前用户ID,$PWD表示当前目录。定义变量如`A=123`,
121 0