iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >Shell编程中Shift的用法小结
  • 895
分享到

Shell编程中Shift的用法小结

Shell编程中Shift用法Shellgrep命令 2022-06-04 23:06:07 895人浏览 薄情痞子
摘要

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

位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。
非常有用的 Unix 命令:shift。我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当 shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*。若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。

示例如下:


#测试 shift 命令(x_shift.sh)
until [ $# -eq 0 ]
do
echo "第一个参数为: $1 参数个数为: $#"
shift
done
执行以上程序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。

扩展:Shell grep 命令扩展增强

背景: 线上排查问题需要找出有某个特征的日志,并获取这些日志的完整调用日志链路。 

比如, 通过某个tag 获取到了这些日志的 请求id 【Span ID】,


cat xxxx.log | grep '某tag' | awk  -F '某tag' '{print $2}' 

然后还需要再一步取得所有SpanId的完整日志链。显然目前我们需要使用 xargs 来批处理执行。 但这里有个问题。 grep 无法支持这种用法。

如下:


[localhost ~]$ cat xxxxxx.log | grep '某tag' | awk  -F '某tag' '{print $2}'  | xargs grep xxxxxx.log

grep: 某SpanId: No such file or directory

grep 第一个参数必须是 关键词正则 ,其后跟随文件路径。

所以为了解决这个问题,我们需要使用一个改造后的SHELL脚本,这里命名为 grepx ,用于增强 grep 命令:


#!/bin/bash

FILE_PATH="$1*"

COUNT=0
while  [ $# -gt 0 ]
do
    if [ $COUNT -gt 0 ]
    then
        grep "$1" $FILE_PATH
        #输出空白行用来隔断日志   
       echo -e "\n\n"
    fi

    #shift命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下,依次遍历每个参数
    shift
    let COUNT=COUNT+1
done

原理是对调参数位置, 再通过 shift 命令移动参数,批量读取管道传递过来的参数,或者 控制台传递的参数。

然后 shell 脚本便可以写成如下:


cat xxxxxx.log | grep '某tag' | awk  -F '某tag' '{print $2}'  | xargs ~/grepx xxxxxx.log

到此这篇关于Shell编程中Shift的用法小结的文章就介绍到这了,更多相关Shell编程中Shift用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

--结束END--

本文标题: Shell编程中Shift的用法小结

本文链接: https://www.lsjlt.com/news/21332.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Shell编程中Shift的用法是什么
    这篇文章主要讲解了“Shell编程中Shift的用法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell编程中Shift的用法是什么”吧!位置参数可以用shift命令左移。比如sh...
    99+
    2023-06-20
  • Shell编程中Shift怎么使用
    在Shell编程中,`shift`命令用于将命令行参数列表向左移动一个位置。它会丢弃第一个参数,并将所有参数的位置向左移动一个位置。以下是`shift`命令的使用方式:```shellshift [n]````n`是一个可选的数字参数,...
    99+
    2023-08-09
    Shell Shift
  • 如何使用shift解决shell编程中的入参问题
    这篇文章主要介绍如何使用shift解决shell编程中的入参问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!shell编程经常会遇到参数个数不定的这种情况,这种情况怎么处理呢?shift就要闪亮登场了。 $#是入参...
    99+
    2023-06-09
  • shell编程中的小技巧有哪些
    这篇文章将为大家详细讲解有关shell编程中的小技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、打印一些头信息command  <<  dilimiter………...
    99+
    2023-06-09
  • Shell脚本中$符号的嵌套使用方法小结
    目录1 示例2 说明本文主要介绍在编写 Shell 脚本时,通过嵌套使用 $ 符号,间接获取变量或表达式的值的具体方法。 先说结论,在 Shell 脚本中,可以通过使用 eval 命令来实现 $ 符号的嵌套使用...
    99+
    2023-05-06
    Shell $符号嵌套 Shell $符号
  • JAVA编程中的反射用法总结
    本篇内容主要讲解“JAVA编程中的反射用法总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA编程中的反射用法总结”吧!目录下面对Java反射的基础知识进行说明和总结:总结下面对Java反...
    99+
    2023-06-20
  • Shell编程中for循环结构是怎么样的
    小编给大家分享一下Shell编程中for循环结构是怎么样的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!for i in {取值范围}do循环体done求取1-100数字的和、找出1-100中能被2整除的数字、找出1-10...
    99+
    2023-06-04
  • java中random的用法小结
    目录一、java.lang.Math.random()方法的用法二、 java.util.Random类用法java中存在两个随机函数,它们分别来自java.long.Math.ra...
    99+
    2024-04-02
  • drools中query的用法小结
    目录一、背景二、需求三、前置需求1、query的语法结构2、java中如何获取query的结果四、实现1、无参数query的使用1、drl文件编写2、java文件编写2、有参数que...
    99+
    2024-04-02
  • shell脚本编程中case语句的实例用法
    本篇内容介绍了“shell脚本编程中case语句的实例用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!case语句是用来实现多个if..e...
    99+
    2023-06-09
  • Linux中SELinux、Shell简介、touch命令的应用小结
    目录 SElinux⛳️ SELinux的规则与概念⛳️ 查看SELinux⛳️ SELinux策略⛳️ SELinux模式⛳️ SELinux设置 Shell简介⛳️ Shell分类⛳️ BASH基础 touch命令的...
    99+
    2023-02-03
    linux  SELinux linuxShell简介 linux touch命令
  • Shell脚本中的数组用法总结
    这篇文章主要讲解了“Shell脚本中的数组用法总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本中的数组用法总结”吧!1、怎么声明一个数组变量?直接赋值:代码如下:array[...
    99+
    2023-06-09
  • C#中AutoResetEvent控制线程用法小结
    目录AutoResetEvent主要方法及实践第二种方法Semaphore第三种方法,约定每个线程只干自己的事第四种方法 Mutex本文主要来自一道面试题,由于之前对AutoRese...
    99+
    2024-04-02
  • 用PHP编写Shell接口的5个编程算法
    在日常的开发工作中,我们经常需要与Shell交互,例如执行一些系统命令、启动一些进程等等。而PHP作为一种强大的Web编程语言,也可以很好地与Shell进行交互。本文将介绍,并附上演示代码。 执行系统命令 PHP中可以使用system...
    99+
    2023-08-31
    shell 接口 编程算法
  • Python shell中的函数如何应用于编程算法?
    Python shell是一种交互式解释器,可以让我们快速测试和调试Python代码。在Python shell中,我们可以使用各种Python函数来执行特定任务。这些函数可以非常有用,特别是在编程算法中。在本文中,我们将探讨如何使用Py...
    99+
    2023-07-08
    shell 函数 编程算法
  • Pythonargparse中的action=store_true用法小结
    目录Python argparse中的action=store_true用法前言示例官方文档多了解一点儿自定义小结思考补充:python库Argparse中的可选参数设置 actio...
    99+
    2023-02-10
    Python argparse中的action=store_true Python action=store_true
  • python中f‘{}‘用法小结
    python中f‘{}‘用法 #先定义一个类class Desk():def desk(self):print(‘能放东西’)prin...
    99+
    2023-03-01
    python中f‘{}‘用法 python中f用法
  • Java中BigInteger用法小结
    目录一.介绍BigInteger经常使用到的一些函数二、介绍BigInteger的读入方法——nextBigInteger(),从控制台读入一个BigInte...
    99+
    2023-03-07
    java中BigInteger用法 java BigInteger
  • Shell脚本编程中常用的数学运算方法教程
    这篇文章主要介绍“Shell脚本编程中常用的数学运算方法教程”,在日常操作中,相信很多人在Shell脚本编程中常用的数学运算方法教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Shell脚本编程中常用的数学...
    99+
    2023-06-09
  • springjdbctemplate的用法小结
    目录概述JDBCTemplate开发步骤介绍使用概述 原始繁琐的JDBC API对象的封装;操作模板如下:JdbcTemplate和HibernateTemplate,操作nosql...
    99+
    2023-05-16
    spring jdbctemplate使用 spring jdbctemplate
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作