shift 命令学习

文章目录

  • shift 命令学习
    • 1. shell 几个特殊变量
    • 2. shift 使用
      • 2.1 每次移动一个参数
      • 2.2 每次移动多个参数
      • 2.3 与 case 配合使用

shift 命令学习

参考连接:https://www.cnblogs.com/w-j-q/p/14863580.html

1. shell 几个特殊变量

#!/bin/bash
echo "\$0:$0"    # 当前脚本的文件名(间接运行时还包括绝对路径)。
echo "\$n:$n"    # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 。
echo "\$#:$#"    # 传递给脚本或函数的参数个数。
echo "\$*:$*"    # 传递给脚本或函数的所有参数。
echo "\$@:$@"    # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下面将会讲到。
echo "\$?:$?"    # 上个命令的退出状态,或函数的返回值。
echo "\$$:$$"    # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
echo "\$_:$_"    # 上一个命令的最后一个参数。
echo "\$!:$!"    # 后台运行的最后一个进程的 ID 号。

$*$@ 都表示传递给函数或脚本的所有参数,不被双引号 (“”) 包含时,都以 “$1"“ 2 " … " 2" … " 2""n” 的形式输出所有参数。但是当它们被双引号 (”“) 包含时,”$*"会将所有的参数作为一个整体,以 "$1 $2 … n " 的形式输出所有参数; " ‘ n" 的形式输出所有参数; "` n"的形式输出所有参数;"‘@`"会将各个参数分开,以 “$1”、“ 2 " 、 … 、 " 2"、…、" 2""n” 的形式输出所有参数。

  • 示例
[root@localhost myself]# sh test.sh A B B D E
$0:test.sh
$n:
$#:5
$*:A B B D E
$@:A B B D E
$?:0
$$:109424
$_:$$:109424
$!:

2. shift 使用

shift 命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理,常见于 Linux 中各种程序的启动脚本。

2.1 每次移动一个参数

  • 示例
#!/bin/bash
while [ $# != 0 ]
doecho -e "参数值为 $1, 参数个数为 $#"shift
done# 每次运行 shift(不带参数的),销毁一个参数(变量的个数($#)减一),后面的参数前移(不管参数之间相隔一个或者多个空格)。
[root@localhost myself]# sh shift1.sh a b c d e
参数值为 a, 参数个数为 5
参数值为 b, 参数个数为 4
参数值为 c, 参数个数为 3
参数值为 d, 参数个数为 2
参数值为 e, 参数个数为 1# 注意:上述脚本,如果 shift 移动参数变为 2 ,在参数个数为奇数时则会出现死循环,如果是偶数则没问题。
# 脚本示例:
#!/bin/bash
while [ $# != 0 ]
doecho -e "参数值为 $1, 参数个数为 $#"shift 2		# 这里移动位数变为2
done

2.2 每次移动多个参数

shift 命令一次移动参数的个数由其所带的参数指定。例如,现在有 $1, $2, $3, …,$9 个参数,当 shell 程序处理完前 4 个命令行参数后(即还剩下后面 5 个参数),可以使用 shift 4 命令把 $9 移到 $1。

  • 示例:自定义 shift 每次移动的参数个数。
#!/bin/bash
while [ $# -gt 5 ]
doecho -e "参数值为 $1, 参数个数为 $#"shift
done
shift 4
echo -e "参数值为 $1, 参数个数为 $#"[root@localhost myself]# sh shift2.sh a1 b2 c3 d4 e5 f6 g7 h8 i9
参数值为 a1, 参数个数为 9
参数值为 b2, 参数个数为 8
参数值为 c3, 参数个数为 7
参数值为 d4, 参数个数为 6
参数值为 i9, 参数个数为 1

2.3 与 case 配合使用

case 简介

case ..... esacif ... then ... fi 一样,都是条件判断式的语句结构,它们用倒序的字母单词和正序的单词配对,比如 if 语句,结束时用 fi 来配对, esaccase 配对

case $参数变量 in	# 以关键字 case 作为开始
"变量值1")			# 变量值用双引号括起来,关键字用小括号括起来程序段1		# 对应的逻辑;;              # 每个类别结尾使用两个连续的分号来处理
"变量值2")程序段2;;
"变量值3")程序段3;;
*)                 # 最后一个位置参数值会用*来代替所有其他值程序段4;;
esac               # 关键字 esac(case 的反写) 结束
  • 示例: shift 搭配 case ... esac 实现 shell 脚本手动传递参数处理
#!/bin/bash
while [ -n "$1" ]
docase "$1" in-a)echo "发现 -a 选项";;-b)echo "发现 -b 选项"echo "-b 选项的参数值是:$2"shift;;-c)echo "发现 -c 选项"echo "-c 选项的参数值是:$2"shift;;*)echo "$1 是一个未知选项";;esacshift
done[root@localhost myself]# sh shift3.sh -a -b 200 -c 300 -d 400
发现 -a 选项
发现 -b 选项
-b 选项的参数值是:200
发现 -c 选项
-c 选项的参数值是:300
-d 是一个未知选项
400 是一个未知选项

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL构造一个触发器audit_log

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 构造一个触发…

SQL 字段类型属性

NULL属性 Null/Not Null 属性来限制数据是否可以为空 默认为 Null create table t_01 {username varchar(10) not null--... } Default属性 设置默认值 表字段的时候给定默认数据,在后续字段操作(数据新增)的时候系统没有检测到字段有数据…

TPM开启确认

TPM 2.0在系统中开启的确认 方法一 :鼠标右击开始菜单-运行(或按下键盘的WinR键),输入tpm.msc,然后 回车 弹出窗口 方法二:通过“设置>权限和安全>Windows安全中心>设备安全性” 点击Devices s…

Transformer相关的课程、视频和工具 - Transformer教程

大家好!今天我们来聊聊近年来在人工智能领域大放异彩的Transformer。这个模型自从被提出以来,就迅速成为自然语言处理(NLP)和其他机器学习任务中的热门工具。可能很多小伙伴对Transformer还是有些陌生,不知道如何学习和…

PE73_D_E6_BLE

产品参数 产品型号 PE73_D_E6_BLE 尺寸(mm) 176.2*137.15*80mm 显示技术 电子墨水屏双面显示 显示区域(mm) 163.2(H) * 97.92(V) 分辨率(像素) 800*480 外观颜色 银色 显示颜色 黑/白/红/黄/蓝/绿 视觉角度 180 工作温度 15-35℃ 产品重量 268g 电池容…

计网ip层重要面经总结

文章目录 127.0.0.1, localhost, 0.0.0.0有什么不同?ipv6还需要NAT吗?DNS查询服务器的基本流程浏览器输入一个URL到显示器显示的过程PING是怎么工作的?ipv4和ipv6究竟有哪些区别?什么是跨域,什么情况下会发生跨域问题&#xff1f…

学懂C#编程:高级开发技术——深入理解发布-订阅模式(Publisher-Subscriber Pattern)的实现

一、理解 发布-订阅模式(Publish-Subscribe Pattern) 机制 发布-订阅模式(Publish-Subscribe Pattern)是一种消息传递模式,它允许消息的发送者(发布者)和消息的接收者(订阅者&#x…

..质数..

先弄清楚我们在上小学时 学的概念。 1、什么是质因数? -质因数是指能够整除给定正整数的质数。每个正整数都可以被表示为几个质数的乘积,这些质数就是该数的质因数。质因数分解是将一个正整数分解成若干个质数相乘的过程。例如,数字 12…

Nginx服务优化

1 隐藏版本号* 方法一 :在http模块中添加行 #隐藏版本号 server_tokens off;方法二 :修改版本信息 进入源码安装包 cd /安装包根目录/src/core vim nginx.h 解注释以下行并修改 define NGINX_VERSION "Dont you guess!" difine NGINX_VER…

C:数据结构---算法

1.1排序算法 稳定排序 不稳定排序 ①冒泡排序(稳定) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对 ②选择排序 在未排序序列中找到最小(大…

Nature Communications|柔性高密度、高灵敏应变传感器阵列(柔性应变传感/界面调控/电子皮肤/柔性电子)

复旦大学武利民( Limin Wu)和李卓( Zhuo Li)团队,在《Nature Communications》上发布了一篇题为“High-density, highly sensitive sensor array of spiky carbon nanospheres for strain field mapping”的论文。论文内容如下: 一、 摘要 在工程应用中,准确地映射应变…

星环科技推出语料开发工具TCS,重塑语料管理与应用新纪元

5月30-31日,2024向星力未来数据技术峰会期间,星环科技推出一款创新的语料开发工具——星环语料开发工具TCS(Transwarp Corpus Studio),旨在通过全面的语料生命周期管理,极大提升语料开发效率,助…

批量提取PDF中表格内容

1 背景 从PDF文件获取表格中的数据,也是日常办公容易涉及到的一项工作。比如我们想获取某公司年报里面的表格数据,PDF动辄上百页的数据。 2 传统方法 一个一个从PDF表格中复制,然后粘贴到Excel表格中,效率太低了。 3 办公自动…

云计算【第一阶段(29)】远程访问及控制

一、ssh远程管理 1.1、ssh (secureshell)协议 是一种安全通道协议对通信数据进行了加密处理,用于远程管理功能SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,建立在应用层和传输层基础上的安全协议。SSH客…

深度学习中的正则化技术 - 噪声鲁棒性篇

序言 在深度学习的蓬勃发展中,模型的性能与泛化能力成为了研究者们关注的焦点。然而,实际应用中的数据往往伴随着各种噪声,这些噪声不仅来源于数据采集过程中的硬件限制,还可能由环境干扰、传输错误等因素引入。噪声的存在严重影…

synchronized关键字详解(全面分析)

目录 synchronized关键字详解1、synchronized关键字简介2、synchronized作用和使用场景作用使用场景①、用在代码块上(类级别同步)②、用在代码块上(对象级别同步)③、用在普通方法上(对象级别同步)④、用在静态方法上(类级别同步)总结: 3、synchronized底层原理&am…

使用Gunicorn提高Web应用的多核并发处理能力

使用Gunicorn提高Web应用的多核并发处理能力 Web应用程序需要处理大量的并发请求,尤其在多用户访问的场景下,如何有效地利用服务器的多核处理能力是提升性能的关键之一。Gunicorn(Green Unicorn)作为一个Python WSGI HTTP服务器&…

【初阶数据结构】2.顺序表

文章目录 1.线性表2.顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1.线性表 线性表(linear list)是n…

大数据平台之HiveServer2

HiveServer2 是 Apache Hive 的一个重要组件,用于为客户端提供统一的接口来访问 Hive 数据仓库。它提供了一个 JDBC、ODBC 和 Thrift 接口,支持多种客户端连接方式,并增加了多用户隔离和增强的安全性。 HiveServer2 详细介绍 1. 背景与发展…

多线程链表操作设计

在多线程环境中操作共享的数据结构(例如链表),通常需要使用互斥锁(mutex)或其他同步机制来确保数据的一致性和防止竞态条件。然而,使用互斥锁会带来锁的开销和潜在的死锁问题。为了设计一个可重入并且高效的链表操作,可以考虑以下几种无锁或细粒度锁的设计方案。 1. 无锁…