shift:解决shell编程中的入渗问题
我说过了,shell是我的常规武器,目前虽然还不纯熟,但是我爱shell这门语言,在Linux下面混,总要写脚本。程序员是有基因,对编程语言是有偏好的,你让我写C代码,我会觉得很爽,会有困难,会有痛苦的摸索和学习,但是,我愿意;学习shell/python,我也很乐意,甚至Lisp这种冷门的语言我也充满了好奇,虽然现在Go和Erlang我一点也不懂,但是我按耐不住对这两种语言的兴趣,只要我抽出手来,一定会和他们缠绵一番。有爱就会有恨,我痛苦地意识到到自己是个很情绪化的程序员,哪怕我一遍遍地骂自己bitch is bitchy,一遍遍的告诉自己要端正态度,学习CSS/HTML/仍然让我痛苦的死去活来,可以预计的是,让我学习Java我也会很痛苦(我也清楚地明白,痛苦之烈一定不如学习CSS/HTML的痛苦)。我知道我在跑题,我贱人就是矫情,但是我压抑的太难受了,不找个地方发泄一下,我会把自己憋坏。
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
shift:解决shell编程中的入渗问题的更多相关文章
- Shell编程中Shift的用法
Shell编程中Shift的用法 位置参数可以用shift命令左移.比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1.$2.$3丢弃,$0不移动.不带参数的shif ...
- Shell编程中Shift的用法【转】
本文转载自:http://www.cnblogs.com/image-eye/archive/2011/08/20/2147153.html Shell编程中Shift的用法 位置参数可以用shift ...
- Shell编程中while与for的区别及用法详解【转】
在shell编程中经常用到循环,常用的循环有for和while循环两种.while循环默认以行读取文件,而for循环以空格读取文件切分文件,本篇就结合现网的一些使用示例说说二者的用法和区别. 一.常用 ...
- shell编程中的 三种结构: 条件if/选择结构case/循环for/while/until等结构 和 函数的用法
shell 函数的使用 (md中, 列表本身是有格式的, 他要产生缩进, 其次,列表项和列表项之间, 可以留有一个空行, 是合法的, 允许的) shell函数,就是 就相当于一个命令来看待和处理的, ...
- Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...
- shell编程中的if语句
if语句在任何编程中都是必不可少.至关重要的分支语句,shell也是如此,只不过各种编程中的方式和格式有点不太一样 shell编程中的if语句基本格式如下: if [ X$1 = XA ];then ...
- shell编程中如何执行oracle语句
shell编程中如果向oracle中插入数据之类的,需要先把执行语句放到文件中,然后再@这个文件执行 有如下俩种方式供参考: SQL=`sqlplus user/pwd@orains << ...
- shell编程中的单/双 小括号, 中括号, 大括号
linux shell中的变量类型?分字符串或者数字或者bool类型吗? 参考: http://www.cnblogs.com/nufangrensheng/p/3477281.html 不分! sh ...
- [ SHELL编程 ] shell编程中数值计算方法实例
SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结.主要包括let.bc.expr.(())等. 1.let 使用格式:let 表达式,表 ...
随机推荐
- 【CF1015C】Songs Compression(贪心)
题意: 给定n和m,n组(a[i],b[i]),每一组a[i]可以压缩为b[i],求最少只需要压缩几个,使得m可以存下所有数据,无解输出-1 思路:按差贪心,排序 #include<cstdio ...
- css3 实现居中的9中方法
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Perl语言入门--3--perl的控制结构
表达式真假值总结: 表达式不一定是逻辑表达式,但一定要得出真假值 假值:逻辑值为假 值为0 字符串为空 列表为空 undef 其他情况为真 1.if {} elsif {} else {} 2.u ...
- LeetCode OJ--Gray Code **
http://oj.leetcode.com/problems/gray-code/ 求格雷码的表示,主要应用递归. 递归生成码表 这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造: 1位格 ...
- redis 延迟消息
1.查询下redis 是否打开了键空间通知功能 发现打开了,如果没有打开可以在执行下 我们可以看到参数设置 2.订阅下键空间或者事件通知 订阅键空间:subscribe __keyspace@0__: ...
- Java判断语句中判断条件的执行顺序
if判断里面如果是多个条件的判断,会按照从前往后的顺序执行.基本所有语言都是一致的设计,这样做能提高程序的效率. 比如: if ( conditionA && conditionB ) ...
- Oracle hidden costs revealed, Part2 – Using DTrace to find why writes in SYSTEM tablespace are slower than in others
http://blog.tanelpoder.com/2008/09/02/oracle-hidden-costs-revealed-part2-using-dtrace-to-find-why-wr ...
- n个平面把空间最多分成几个部分?
题目: n个平面把空间最多分成几个部分? 解答: 1条直线可以把平面分成2部分,2条直线最多可以把平面分成4部分, 3条直线最多可以把平面分成几部分,4条直线呢?你能不能想出n条直线最多可以把平面分成 ...
- Android 自定义录音、播放动画View,让你的录音浪起来
最近公司项目有一个录音的录制和播放动画需求,然后时间是那么紧,那么赶紧开撸. 先看效果图 嗯,然后大致就是这样,按住录音,然后有一个倒计时,最外层一个进度条,还有一个类似模拟声波的动画效果(其实中间的 ...
- win10安装scrapy
前提已经安装好python2.7背景:scrapy框架,windows下的部署工作挺麻烦的.需要用的资源整合了一下可以为以后需要的同学节省不少时间. 相关文件:网盘链接: http://pan.bai ...