shell脚本中$#、$*、$@、$?、$0-n等含义一次性搞明白!!!

2023-11-18

一、Shell脚本变量的含义

1、$#:表示执行脚本传入参数的个数

2、$*:表示执行脚本传入参数的列表(不包括$0)

3、$$:表示进程的id;Shell本身的PID(ProcessID,即脚本运行的当前 进程ID号)

4、$!:Shell最后运行的后台Process的PID(后台运行的最后一个进程的 进程ID号)

5、$@:表示获取执行脚本传入的所有参数

6、$0:表示执行的脚本名称

7、$1:表示第一个参数

8、$2:表示第二个参数

9、$?:表示脚本执行的状态,0表示正常,其他表示错误

二、$*和$@的差异

在shell中,$@和$*都表示命令行所有的参数(不包含$0),但是$*将命令行所有的参数看成一个整体,而$@则区分各个参数

Demo 脚本示例:

cat ./tmp/shll_test/test.sh
#!/bin/sh

MY_SHELL_PATH=`dirname $0`

echo "print shell script location:"
echo ${MY_SHELL_PATH}
echo "===================================="

echo "enter shell script location:${MY_SHELL_PATH}"
cd `dirname $0`
echo "list current directory content:"
ls -lh
echo "===================================="

echo "shell script name=${0}"
echo "===================================="

echo "first args=${1}"
echo "===================================="

echo "second args=${2}"
echo "===================================="

echo "arguments number=$#"
echo "===================================="

echo "arguments list content=$@"
echo "===================================="

echo "arguments list content=$*"
echo "===================================="

echo "the process id is " "$$"
echo "===================================="

echo "the shell execute return value is " "$?"
echo "===================================="

echo "the all paramters:"
for i in "$@"
  do
    echo $i  #循环$#次
  done
echo "===================================="

 

echo "the all paramters:"
for i in "$*"
  do
    echo $i
  done
echo "===================================="

测试结果 

[root@t4-algo-7 /]# pwd
/
[root@t4-algo-7 /]# ll
total 76
lrwxrwxrwx.   1 root root     7 Nov 29  2018 bin -> usr/bin
dr-xr-xr-x.   5 root root  4096 Nov 29  2018 boot
drwxr-xr-x   19 root root  3120 Dec 29 10:05 dev
drwxr-xr-x.  84 root root  4096 Jan 12 15:29 etc
drwxr-xr-x.   7 root root  4096 Dec 31 12:00 home
lrwxrwxrwx.   1 root root     7 Nov 29  2018 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 Nov 29  2018 lib64 -> usr/lib64
drwx------.   2 root root 16384 Nov 29  2018 lost+found
drwxr-xr-x.   2 root root  4096 Apr 11  2018 media
drwxr-xr-x.   4 root root  4096 Dec 31 11:02 mnt
drwxr-xr-x.   6 root root  4096 Jan 12 11:53 opt
dr-xr-xr-x  400 root root     0 Jan  7  2020 proc
dr-xr-x---.  22 root root  4096 Jan 12 18:27 root
drwxr-xr-x   27 root root   840 Jan 12 12:01 run
lrwxrwxrwx.   1 root root     8 Nov 29  2018 sbin -> usr/sbin
drwxr-xr-x.   2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x   13 root root     0 Mar 23  2020 sys
drwxrwxrwt.  12 root root 20480 Jan 12 18:34 tmp
drwxr-xr-x.  13 root root  4096 Nov 29  2018 usr
drwxr-xr-x.  19 root root  4096 Nov 29  2018 var

[root@t4-algo-7 shll_test]# pwd
/tmp/shll_test
[root@t4-algo-7 shll_test]# yum install -y tree
[root@t4-algo-7 shll_test]# tree 
.
├── dir1
│   └── dir2
├── file.txt
└── test.sh

2 directories, 2 files
[root@t4-algo-7 shll_test]#
[root@t4-algo-7 /]# ./tmp/shll_test/test.sh 1 2 3,4
print shell script location:
./tmp/shll_test
====================================
enter shell script location:./tmp/shll_test
list current directory content:
total 8.0K
drwxr-xr-x 3 root root 4.0K Jan 12 18:22 dir1
-rw-r--r-- 1 root root    0 Jan 12 18:22 file.txt
-rwxr-xr-x 1 root root 1.2K Jan 12 18:50 test.sh
====================================
shell script name=./tmp/shll_test/test.sh
====================================
first args=1
====================================
second args=2
====================================
arguments number=3
====================================
arguments list content=1 2 3,4
====================================
arguments list content=1 2 3,4
====================================
the process id is  6152
====================================
the shell execute return value is  0
====================================
the all paramters:
1
2
3,4
====================================
the all paramters:
1 2 3,4
====================================
[root@t4-algo-7 /]# 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell脚本中$#、$*、$@、$?、$0-n等含义一次性搞明白!!! 的相关文章

  • 在 Fish Shell 中设置导出

    我安装了多个版本的 PHP 对于我的正常开发 我总是使用通过自制程序安装的 PHP 5 5 x 在鱼壳里 which php php version gt usr local bin php gt PHP 5 5 8 cli built J
  • 如何使用 bash 显示具有两个子文件夹的文件夹?

    我通过 Cygwin 使用 bash 我有一个大文件夹 a 有很多子文件夹 b 这些子文件夹各有一个或两个子文件夹 c 我想找到所有有两个子文件夹 c 的子文件夹 b 并输出它们 结构如下 a b1 c1 b2 c1 c2 b3 c1 c2
  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • 嵌入式Linux poll()不断返回

    我有一个特别的问题 当我知道没有什么可读时 民意调查不断返回 因此设置如下 我有 2 个文件描述符 它们构成fd设置民意调查监视 一种用于引脚从高到低的变化 GPIO 另一个用于代理输入 代理输入出现问题 处理的顺序是 启动main函数 然
  • QFileDialog::getSaveFileName 和默认的 selectedFilter

    我有 getSaveFileName 和一些过滤器 我希望当用户打开 保存 对话框时选择其中之一 Qt 文档说明如下 可以通过将 selectedFilter 设置为所需的值来选择默认过滤器 我尝试以下变体 QString selFilte
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • 强制卸载 NFS 安装目录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • shell脚本中关联数组的时间复杂度

    我想知道在 shell 脚本中使用关联数组时如何构造 实现 另外 我想知道基于 shell 脚本的关联数组的时间复杂度是否是最佳的 因为我们可以使用字母和数字作为它们各自的键 编辑 他们使用什么哈希函数 如果您使用关联数组 则不能通过 使用
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • Mongodb shell mongo:通常只允许每个套接字地址(协议/网络地址/端口)使用一次。对于套接字:0.0.0.0:27017

    前两天还好好的 现在mongod不起作用 甚至echo ps A grep mongo没有打印任何内容 但它警告错误 每个套接字地址只有一种用途 怎么杀掉它 我也尝试过不同的随机端口 他们怎么可能也失败呢 D mongodb win32 x
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 将文件从不同目录复制到公共目录

    我有很多目录 其中包含 c文件 我想复制全部 c使用 shell 脚本将不同目录中的文件复制到单个目录 find name c exec cp t tmp 启动当前目录中的所有项目 递归 获取名称结尾的项目 c 将这些项目复制到 tmp 如
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数

随机推荐

  • Linux Kernel调度管理之task_struct

    task struct是进程描述符 struct task struct ifdef CONFIG THREAD INFO IN TASK For reasons of header soup see current thread info
  • 敌人进入攻击范围

    笔记 首先要用到游戏对象组件collider 添加组建collider给检测对象和被检测对象 检测对象的 IS trigger 要勾选 两个对象必须有一个添加了rigidbody组建 可以使用edit 中project中的physical进
  • Faster RCNN代码理解(Python)

    最近开始学习深度学习 看了下Faster RCNN的代码 在学习的过程中也查阅了很多其他人写的博客 得到了很大的帮助 所以也打算把自己一些粗浅的理解记录下来 一是记录下自己的菜鸟学习之路 方便自己过后查阅 二来可以回馈网络 目前编程能力有限
  • public boolean isAdmin(String adminId,String adminPwd)

    package cn edu zjgsu book biz import java sql Connection import java sql ResultSet import java sql SQLException import j
  • 报错Installation failed with message Failed to finalize session : INSTALL_FAILED_DUPLICATE_PERMISSION

    遇到这个报错问题 其实是真的挺受用的 把外包项目拿到手之后 发现里面的签名文件是用的系统签名文件 然后就自己从新打包签名后 再次安装后 就出现了上述这个报错 报错如下 Installation failed with message Fai
  • 无线发射功率

    无线电发射功率 无线电发射机输出的射频信号 通过馈线 电缆 输送到天线 由天线以电磁波形式辐射出去 电磁波到达接收地点后 由天线接收下来 仅仅接收很小很小一部分功率 并通过馈线送到无线电接收机 因此在无线网络的工程中 计算发射装置的发射功率
  • msm8937 usb power off charging log

    Format Log Type Time microsec Message Optional Info Log Type B Since Boot Power On Reset D Delta S Statistic S QC IMAGE
  • spark中repartition和coalesce的区别

    总的来讲 两者 对是否允许shuffle 不同 coalesce numPartitions shuffle false repartition numPartitions repartition 其实是 coalesce 中参数shuff
  • 调用拷贝构造函数的三种情况

    1 当用类的一个对象去初始化类的另一个对象时 如下代码中的 Rectangle p2 p1 用对象p1去初始化对象p2 拷贝构造函数被调用 代入法 还有一种是赋值法 Rectangle p2 p1 2 当函数的形参是类的对象 调用函数进行形
  • 中达优控一体机说明书_如何在中达优控一体机上实现温度显示?

    如何在中达优控一体机上实现温度显示 首先是硬件的连接 硬件连接良好是系统能运行的基础 第二就是软件的编程 包括PLC的编程和YKBuilder的组态编程 只有硬件连接好 软件编程没有错误 系统才能正常工作 才能正常显示传感器测量到的温度值
  • Windows环境IDEA下Ranger1.2.0源码编译

    文章目录 Windows环境IDEA下Ranger1 2 0源码编译 一 本地环境准备 二 源码编译 三 使用idea打开项目 1 安装数据库Mysql版 2 配置Tomcat 发布 security admin web项目 3 修改sec
  • 建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1,3,5个学生的数据。

    问题描述 建立一个对象数组 内放5个学生的数据 学号 成绩 用指针指向数组首元素 输出第1 3 5个学生的数据 样例输入 无 样例输出 101 78 5 103 98 5 105 95 5 补充程序 include
  • kill 命令 killall pkill

    killall 命令 Linux系统中的killall命令用于杀死指定名字的进程 kill processes by name 我们可以使用kill命令杀死指定进程PID的进程 如果要找到我们需要杀死的进程 我们还需要在之前使用ps等命令再
  • L1-071 前世档案 (20 分)–PAT 团体程序设计天梯赛 GPLT

    include
  • ES6 Promise详解

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • Android Studio工具使用技巧

    作为一个Android开发者 熟练使用开发工具能让你工作效率提高 能让你少点加班 剩下时间学习其他的知识 是个多么好的事情 想高级攻城狮方向迈进 不费话了 直接进去主题 一 模版 1 1 for循环的使用 遍历集合的时候 对象 for就可以
  • 使用Python构建强大的网络爬虫

    介绍 网络爬虫是从网站收集数据的强大技术 而Python是这项任务中最流行的语言之一 然而 构建一个强大的网络爬虫不仅仅涉及到获取网页并解析其HTML 在本文中 我们将为您介绍创建一个网络爬虫的过程 这个爬虫不仅可以获取和保存网页内容 还可
  • 【满分】【华为OD机试真题2023 JAVA&JS】字符串重新排序

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 字符串重新排序 知识点排序数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个字符串s s包含以空格分隔的若干个单词 请对s进行如下处理后输出 1 单词
  • ctfshow web171-174

    Web 171 打开发现以下内容 看到了一个查询语句 于是认真看了一下 拼接sql语句查找指定ID用户 sql select username password from user where username flag and id GE
  • shell脚本中$#、$*、$@、$?、$0-n等含义一次性搞明白!!!

    一 Shell脚本变量的含义 1 表示执行脚本传入参数的个数 2 表示执行脚本传入参数的列表 不包括 0 3 表示进程的id Shell本身的PID ProcessID 即脚本运行的当前 进程ID号 4 Shell最后运行的后台Proces