shift妙用之解决shell编程中的入参问题

 更新时间:2013年08月02日 19:19:13   投稿:mdxy-dxy  
shell编程经常会遇到参数个数不定的这种情况,这种情况怎么处理呢?shift就要闪亮登场了

shell编程经常会遇到参数个数不定的这种情况,这种情况怎么处理呢?shift就要闪亮登场了。

$#是入参的个数,
$@是当前所有的入参
$0是脚本的名字
$1是第一个入参,$2是第二个入参。。。。

Bash定义了$1到$9,一共9个位置变量,这就决定了我们不能无限制的用$11之类的来获取更多的入参。
这时候就需要用shift了,shift会将入参右移,如下图所示:




我们看一段shell代码,加深理解:

复制代码 代码如下:

root@manu:~/code/shell/temp# cat test.sh
#!/bin/sh
until [ $# -eq 0 ]
do
echo "$@"
shift
done


看下输出:

复制代码 代码如下:

root@manu:~/code/shell/temp# ./test.sh 10 9 8 7 6 5 4 3 2 1
10 9 8 7 6 5 4 3 2 1
9 8 7 6 5 4 3 2 1
8 7 6 5 4 3 2 1
7 6 5 4 3 2 1
6 5 4 3 2 1
5 4 3 2 1
4 3 2 1
3 2 1
2 1
1


现在,如果入參的个数不定,我们如何处理入参呢?
复制代码 代码如下:

until [ -z "$1" ] # Until all parameters used up
do
store_input $1
shift
done

上面这个伪码片段表明如何处理不定的入参,通过store_input,我们将每一个入参保存下来,然后,我们就可以处理了。
最后的最后,给出一个处理不定参数的例子:
复制代码 代码如下:

manu@manu:~/code/shell/temp$ cat sum.sh
#!/bin/sh
sum=0
until [ -z $1 ]
do
sum=`echo $sum+$1 |bc`
shift
done
echo $sum

输出如下:
复制代码 代码如下:

manu@manu:~/code/shell/temp$ ./sum.sh 1 2 3 4 5 6 7 8 9 10
55


参考文章:
//www.jb51.net/article/40259.htm

相关文章

  • linux中批量修改文件名的脚本代码

    linux中批量修改文件名的脚本代码

    linux中批量修改文件名的脚本代码,主要是使用了rename,结合shell,喜欢的朋友可以参考下
    2013-01-01
  • 分享一个入门级可控多线程shell脚本代码

    分享一个入门级可控多线程shell脚本代码

    这篇文章主要介绍了分享一个入门级可控多线程shell脚本代码,需要的朋友可以参考下
    2016-02-02
  • linux 环境 mysql写入中文报错

    linux 环境 mysql写入中文报错

    本篇文章主要介绍了linux 环境 mysql写入中文报错的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-04-04
  • Shell中case...in分支语句的应用

    Shell中case...in分支语句的应用

    shell作为一种脚本编程语言,同样包含循环、分支等其他程序控制结构,从而轻松完成更加复杂、强大的功能,本文主要介绍了Shell中case...in分支语句的应用,感兴趣的可以了解一下
    2023-08-08
  • Shell中set与shopt命令选项的含义和使用示例

    Shell中set与shopt命令选项的含义和使用示例

    这篇文章主要给大家介绍了关于Shell中set与shopt命令选项的含义与使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • exit(-1)或者return(-1)shell得到的退出码为什么是255

    exit(-1)或者return(-1)shell得到的退出码为什么是255

    exit(-1)或者return(-1)shell得到的退出码为是255,大家知道为什么吗?带着这个疑问来脚本之家学习下吧,本篇文章告诉大家答案
    2015-10-10
  • Linux 解压缩文件到指定目录

    Linux 解压缩文件到指定目录

    tar是Linux中常用的打包、压缩、加压缩工具,tar的参数很多,这里仅仅列举常用的压缩与解压缩参数,本文重点讲解Linux 解压缩文件到指定目录,需要的朋友可以参考下
    2023-02-02
  • 使用shell脚本一键部署LNMP架构的方法

    使用shell脚本一键部署LNMP架构的方法

    这篇文章主要介绍了使用shell脚本一键部署LNMP架构的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Linux中使用mtime查看文件的最后修改时间的操作方法

    Linux中使用mtime查看文件的最后修改时间的操作方法

    在 Linux 系统中,mtime 是文件的一个重要属性,它记录了文件的最后修改时间,了解文件的最后修改时间对于系统管理和数据追踪非常重要,在本文中,我们将深入探讨如何使用 mtime 查看文件的最后修改时间,需要的朋友可以参考下
    2024-05-05
  • Linux 中的Edquota命令

    Linux 中的Edquota命令

    Linux edquota命令用于编辑用户或群组的磁盘配额。下面通过本文给大家分享Linux 中的Edquota命令,感兴趣的朋友一起看看吧
    2017-10-10

最新评论