Shell编程中Shift的用法

Shell编程中Shift的用法

  • 位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1,$2, 3 , 3, 3,-丢弃,$ 0 不移动。不带参数的shift命令相当于shift 1。

  • 非常有用的 Unix 命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。

      #测试 shift 命令(x_shift.sh)until [ $# -eq 0 ]doecho "第一个参数为: $1 参数个数为: $#"shiftdone执行以上程序x_shift.sh:$./x_shift.sh 1 2 3 4结果显示如下:第一个参数为: 1 参数个数为: 4第一个参数为: 2 参数个数为: 3第一个参数为: 3 参数个数为: 2第一个参数为: 4 参数个数为: 1
    
    • 从上可知 shift 命令每执行一次,变量的个数($#)减一,而变量值提前一位,下面代码用 until 和 shift 命令计算所有命令行参数的和。

      shift 上档命令的应用(x_shift2.sh)
      if [ $# -eq 0 ]
      then
      echo "Usage:x_shift2.sh 参数"
      exit 1
      fi
      sum=0
      until [ $# -eq 0 ]
      do
      sum=`expr $sum + $1`
      shift
      done
      echo "sum is: $sum"			
      执行上述程序:			
      $x_shift2.sh 10 20 15			
      其显示结果为:45
      
  • Shift 命令还有另外一个重要用途, Bsh 定义了9个位置变量,从 $1 到 $9,这并不意味着用户在命令行只能使用9个参数,借助 shift 命令可以访问多于9个的参数。Shift 命令一次移动参数的个数由其所带的参数指定。例如当 shell 程序处理完前九个命令行参数后,可以使用 shift 9 命令把 $10 移到 $1。

  • 实际应用:

while :
do[ -z "$1" ] && break;case "$1" in-a ) NEED_NFS='y' && NEED_HTTP='y' && YUM_ONLINE_REPO='y';shift;;-c ) ONLY_UPGRADE_CTL='y' && UPGRADE='y';shift;;# shift 2 代表后面的参数前移2位, 比如a,b,c前移之后变成 c-C ) check_myarg $1 $2;CONSOLE_PROXY_ADDRESS=$2;shift 2;;-d ) DEBUG='y';shift;;-D ) NEED_DROP_DB='y';shift;;-E ) INSTALL_ENTERPRISE='y';shift;;-H ) check_myarg $1 $2;NEED_HTTP='y' && HTTP_FOLDER=$2;shift 2;;-f ) check_myarg $1 $2;ZSTACK_ALL_IN_ONE=$2;shift 2;;-F ) FORCE='y';shift;;-i ) ONLY_INSTALL_ZSTACK='y' && NEED_NFS='' && NEED_HTTP='' ;shift;;-I ) check_myarg $1 $2;MANAGEMENT_INTERFACE=$2 && NEED_SET_MN_IP='y';shift 2;;-k ) NEED_KEEP_DB='y';shift;;-l ) ONLY_INSTALL_LIBS='y';shift;;-L ) check_myarg $1 $2;LICENSE_PATH=$2;shift 2;;-m ) INSTALL_MONITOR='y';shift;;-M ) UPGRADE_MONITOR='y';shift;;-n ) check_myarg $1 $2;NEED_NFS='y' && NFS_FOLDER=$2;shift 2;;# -o: do not use yum online repo-o ) YUM_ONLINE_REPO='' && ZSTACK_OFFLINE_INSTALL='y' &&  [ "zstack.org" = "$WEBSITE" ] && WEBSITE='localhost';shift;;# -O: use yum online repo-O ) if [ x"${CHECK_REPO_VERSION}" != x"True" ]; thenYUM_ONLINE_REPO='y'ZSTACK_OFFLINE_INSTALL=''elsefail2 "$PRODUCT_NAME don't support '-O' option! Please remove '-O' and try again."fi;shift;;-P ) check_myarg $1 $2;MYSQL_ROOT_PASSWORD=$2 && MYSQL_NEW_ROOT_PASSWORD=$2;shift 2;;-p ) check_myarg $1 $2;MYSQL_USER_PASSWORD=$2;shift 2;;-q ) QUIET_INSTALLATION='y';shift;;-r ) check_myarg $1 $2;ZSTACK_INSTALL_ROOT=$2;shift 2;;# -R: use yum third party repo-R ) check_myarg $1 $2;if [ x"${CHECK_REPO_VERSION}" != x"True" ]; thenZSTACK_PKG_MIRROR=$2YUM_ONLINE_REPO='y'ZSTACK_OFFLINE_INSTALL=''elsefail2 "$PRODUCT_NAME don't support '-R' option! Please remove '-R' and try again."fi;shift 2;;# -s: skip syncing from repo.zstack.io-s ) SKIP_SYNC='y';shift;;-t ) check_myarg $1 $2;ZSTACK_START_TIMEOUT=$2;shift 2;;-T ) check_myarg $1 $2;MYSQL_PORT=$2;shift 2;;-u ) UPGRADE='y';shift;;-y ) check_myarg $1 $2;HTTP_PROXY=$2;shift 2;;-z ) NOT_START_ZSTACK='y';shift;;--mini) MINI_INSTALL='y';shift;;--SY) SANYUAN_INSTALL='y';shift;;--sds) SDS_INSTALL='y';shift;;--) shift;;* ) usage;;esac
done

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

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

相关文章

【云原生】Kubeadmin部署Kubernetes集群

目录 ​编辑 一、环境准备 1.2调整内核参数 二、所有节点部署docker 三、所有节点安装kubeadm,kubelet和kubectl 3.1定义kubernetes源 3.2开机自启kubelet 四、部署K8S集群 4.1查看初始化需要的镜像 4.2在 master 节点上传 v1.20.11.zip 压缩包至 /opt 目录…

【Redis】Redis如何保证和MySQL数据库的数据一致性(带你一文了解)

目录 方法一:采用事务 方法二:订阅Mysql的Binlog文件(可借助Canal来进行) 方法三:基于消息队列的同步方案 方法一:采用事务 MySQL 支持事务,在需要保证一致性的操作中使用事务。通过将 Redis 和 MySQL 操作放在同一个…

np.concatenate

np.concatenate函数是numpy库中用来连接两个或多个数组的函数。这里有一个简单的例子演示np.concatenate的用法: ```python import numpy as np # 创建两个一维数组 array1 = np.array([1, 2, 3]) array2 = np.array([4, 5, 6]) # 使用np.concatenate进行连接 result = np.…

【多线程】线程安全 问题

线程安全 问题 一. 线程不安全的典型例子二. 线程安全的概念三. 线程不安全的原因1. 线程调度的抢占式执行2. 修改共享数据3. 原子性4. 内存可见性5. 指令重排序 一. 线程不安全的典型例子 class ThreadDemo {static class Counter {public int count 0;void increase() {cou…

蓝桥杯官网练习题(兰顿蚂蚁)

题目描述 兰顿蚂蚁,是于 1986 年,由克里斯兰顿提出来的,属于细胞自动机的一种。 平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只"蚂蚁"。 蚂蚁的头部朝向为:上下左右其中一方。 蚂蚁的移动规则十分…

Matlab之DICOM(数字图像和通信医学)格式图像数据读取函数dicomread

一、DICOM是什么? DICOM是数字图像和通信医学格式的图像数据,在MATLAB中,可以使用dicomread函数读取DICOM格式的图像数据。 二、dicomread函数 使用方法如下: imageData dicomread(filename);其中,filename表示DI…

Axure RP美容美妆医美行业上门服务交互原型图模板源文件

Axure RP美容美妆医美行业上门服务交互原型图模板源文件,原型内容属于电商APP,区别于一般电商,它的内容是‘美容美发美妆等’上门服务等。大致流程是线上买单,线下实体店核销消费。 附上预览演示:axure9.com/mobile/73…

GitHub two-factor authentication

1. 介绍 登录 GitHub 官网,会提示要开启双因子认证。 但推荐的 APP 都是国外了,国内用不了。 可以使用 “腾讯身份验证器” 微信小程序。 2. 操作 开启双因子认证: 打开 “腾讯身份验证器” 微信小程序,扫描 GitHub 那个二维…

Go语言网络编程(socket编程)http编程

1、http编程 1.1.1 web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP/IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容&…

博客程序系统其它功能扩充

一、注册功能 1、约定前后端接口 2、后端代码编写 WebServlet("/register") public class RegisterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置…

Python编程练习与解答 练习112:删除异常值

在分析作为科学实验的一部分收集的数据时,在进行其他计算之前,最好先去掉最极端的值。编写一个函数,该函数接受一个值列表和一个非负整数n作为参数。该函数应该创建一个新的列表副本,删除其中n个最大元素和n个最小元素。然后他应该…

LeetCode 3. 无重复字符的最长子串

题目链接 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目解析 我们需要找的是含重复元素的最长子串,当然直接暴力求解固然简单。但是可能引发的情况是超时,而且面试官想看到的也不是让你去暴力解决这类问题。因此我们使…

Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档

Node.js 使用 officecrypto-tool 读取加密的 Excel (xls, xlsx) 和 Word( docx)文档, 还支持 xlsx 和 docx 文件的加密(具体使用看文档)。暂时不支持doc文件的解密 传送门:officecrypto-tool 读取加密的 Excel 示例 一:xlsx-po…

面试求职-面试注意事项

面试技巧和注意事项有哪些? 面试是找工作过程中最重要的一个环节,因为面试成功,你才有可能得到一份工作。求职面试技巧有哪些呢?首先,我们来看看面试注意事项。 企业了解 1、面试前有没有仔细了解过对应企业的情况&#xff0c…

Tomcat安装及使用

这里写目录标题 Tomcat一.java基础1.java历史2.java组成3.实现动态网页功能serveltjsp 4.jdkJDK 和 JRE 关系安装openjdk安装oracle官方JDK 二.tomcat基础功能1.Tomcat介绍2.安装tomcat二进制安装Tomcat 3.配置文件介绍及核心组件配置文件组件 4.状态页5.常见的配置详解6.tomca…

React 学习笔记目录

学习使用的开发工具 编译器 VSCode 开发语言工具 TypeScript /JavaScript 重要程度分类 一般 这个程度的知识点主要是达到熟练掌握即可,不用太深入研究和学习。 重要 这个程度的知识点主要是达到熟练掌握,并且内部的原理切要熟记,因为会关…

strerror函数

目录 strerror 函数介绍&#xff1a; 举例&#xff1a; 使用案例&#xff1a; 优化&#xff1a; perror&#xff1a; strerror 函数介绍&#xff1a; 函数声明&#xff1a; char * strerror ( int errnum );头 文 件&#xff1a;#include <string.h>返 回 值&a…

SpringBoot+MP操作DM8

1. 达梦数据库介绍 达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的国产高性能数据库管理系统&#xff0c;简称DM。当前最新版本是8.0版本&#xff0c;简称DM8。&#xff08;同时也是一款RDBMS&#xff0c;关系型数据库管理系统&#xff0c;和oracle比较像&#xff…

explicit 关键字

c 提供了关键字 explicit &#xff0c;禁止通过构造函数进行的隐式转换。声明为 explicit 的构造函数不能在隐式转换中使用。 [explicit 注意 ] explicit 用于修饰构造函数 , 防止隐式转化。 是针对单参数的构造函数 ( 或者除了第一个参数外其余参数都有默认值的多参构…

迁移学习、领域自适应、多源迁移学习、多任务学习

1.迁移学习与领域自适应 定义&#xff1a; 迁移学习&#xff1a;它包括采用预先训练的模型&#xff08;在源任务上训练的模型&#xff09;&#xff0c;并使用它来改进新目标任务的学习。这可以包括使用模型作为特征提取器&#xff0c;微调模型&#xff0c;或使用模型的部分作…