1、移动变量

脚本 sh05.sh

  1. #!/bin/bash
  2. # Program
  3. # Program shows the effect of shift function
  4. # History:
  5. # // zengdp First release
  6. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  7. export PATH
  8.  
  9. echo "Total parameter number is ==> $#"
  10. echo "You whole parameter is ==> '$@'"
  11. shift
  12. echo "Total parameter number is ==> $#"
  13. echo "You whole parameter is ==> '$@'"
  14. shift
  15. echo "Total parameter number is ==> $#"
  16. echo "You whole parameter is ==> '$@'"

运行 sh sh05.sh one two three four five six

得到

  1. Total parameter number is ==>
  2. You whole parameter is ==> 'one two three four five six'
  3. Total parameter number is ==>
  4. You whole parameter is ==> 'two three four five six'
  5. Total parameter number is ==>
  6. You whole parameter is ==> 'five six'

光看结果你就可以知道啦,那个 shift 会移动变量,而且 shift 后面可以接数字,代表拿掉最前面的几个参数的意思。 上面的运行结果中,第一次进行 shift 后他的显示情况是『 one two three four five six』,所以就剩下五个啦!第二次直接拿掉三个,就变成『 two three four five six 』啦!

2、 当使用shift移动一个变量时,使用while输出第一个变量,从而输出在输入时所有的变量

文件名为 test13.sh

  1. #!/bin/bash
  2. # demostrating the shift command
  3.  
  4. count=
  5. while [ -n "$1" ]
  6. do
  7. echo "Parameter #$count=$1"
  8. count=$[$count + ]
  9. shift
  10. done

脚本执行一个while循环,测试第一个参数的长度,当第一个参数值长度为0时,结束循环,测试第一个参数后,使用shift命令将所有参数左移一个位置

  1. sh test13.sh rich barbara katie jessica

输出为:

  1. Parameter #=rich
  2. Parameter #=barbara
  3. Parameter #=katie
  4. Parameter #=jessica

3、从参数中分离选项

执行shell脚本时经常会遇到既需要使用选项有需要使用参数的情况,在Linux中的标准方式是通过特殊字符吗将二者分开,这个特殊字符吗告诉脚本选项结束和普通参数开始的位置
对于Linux,这个特殊字符吗就是双破折号(--),shell使用双破折号知识选项列表的结束,发现双破只好后,脚本就能够安全的将剩余的命令行参数作为参数而不是选项处理

文件名为 test16.sh

  1. #!/bin/bash
  2. # extracting options and parameters
  3.  
  4. while [ -n "$1" ]
  5. do
  6. case "$1" in
  7. -a) echo "Found the -a option" ;;
  8. -b) echo "Found the -b option";;
  9. -c) echo "Found the -c option" ;;
  10. --) shift
  11. break ;;
  12. *) echo "$1 is not an option";;
  13. esac
  14. shift
  15. done
  16.  
  17. count=
  18. for param in $@
  19. do
  20. echo "Parameter #$count: $param"
  21. count=$[ $count + ]
  22. done

这个脚本使用break命令使得遇到双破折号时从while循环中跳出,因为提前从循环中跳出,所以需要保证加入一个shift命令将双破折号从参数变量中丢弃

第一个测试,尝试使用普通选项和参数集运行脚本

  1. sh test16.sh -a -b -c test1 test2 test3

输出为:

  1. Found the -a option
  2. Found the -b option
  3. Found the -c option
  4. test1 is not an option
  5. test2 is not an option
  6. test3 is not an option

第二次测试,使用双破折号将命令行中选项和参数分开

  1. sh test16.sh -a -b -c -- test1 test2 test3

输出结果为

  1. Found the -a option
  2. Found the -b option
  3. Found the -c option
  4. Parameter #: test1
  5. Parameter #: test2
  6. Parameter #: test3

这时可以看到输出的结果中,因为识别到'--'符号,便跳出了while循环,然后使用下一个循环中输出剩下的变量

shift移动变量的更多相关文章

  1. 10_bash_变量_条件判断及运算_sed_循环

    shell编程: 编译器.解释器编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量):变量在使用前,必须事先声明,甚至还需要初始化 事先转换成可执行格式 C/C++.C#.Ja ...

  2. 每天写点shell--命令行参数

    1.读取参数:位置参数变量是标准的数字: $0是程序名, $1是第一个参数, $2是第二个参数... #!/bin/bash # using one command line parameter fa ...

  3. Perl 的面向对象编程

    转自 http://net.pku.edu.cn/~yhf/tutorial/perl/perl_13.html 拓展阅读 http://bbs.chinaunix.net/forum.php?mod ...

  4. netbeans使用技巧总结+快捷键大全

      部分经常用的快捷键: 使用快捷键Alt+Enter显示修复错误的方法. 4.导航 a)Alt+Shift+O :转到类. b)Ctrl+Tab :在打开的源文件中进行切换. c)Alt+Right ...

  5. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

  6. bash shell学习-shell script基础 (笔记)

    A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux ...

  7. perl5 第十三章 Perl的面向对象编程

    第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...

  8. js01-javascript语法标准和数据类型

    语法规则 (1)JavaScript对换行.缩进.空格不敏感. 备注:每一条语句末尾要加上分号,虽然分号不是必须加的,但是为了程序今后要压缩,如果不加分号,压缩之后将不能运行. (2)所有的符号,都是 ...

  9. shell 构建脚本基础

    bash -v test.sh 启用 verbose 调试模式 bash -n test.sh  启用语法检查调试模式 bash -x test.sh  遍历脚本执行过程 一.基础参数 1.shell ...

随机推荐

  1. DataGuard主备归档存在gap的处理办法

    DataGuard主备之间可能由于网络等原因,造成备库和主库之间的归档日志不一致,这样就产生了gap. 解决gap的步骤: 1.在备库获得gap的详细信息 2.将需要的归档日志从主库拷贝到备库 3.备 ...

  2. Oracle主库归档丢失,备库日志有gap,在不重建备库的情况下,恢复备库

    本文主要描述Oracle备库日志与主库日志之间有gap,切主库这部分gap的归档日志已经删除或丢失,如何在不重建备库的情况下,恢复备库. 欢迎转载,请注明作者.出处. 作者:张正 blog:http: ...

  3. oracle监听服务无法打开

    原因: 修改了主机名,但没有修改监听文件listener.ora里面的配置. 解决办法:修改HOST与主机名相同 LISTENER = (DESCRIPTION_LIST = (DESCRIPTION ...

  4. require()与 require_once()、 include与include_once()

  5. Linux C socket 编程之TCP

    推荐:http://www.cnblogs.com/tianshuai11/archive/2011/11/30/2477224.html

  6. keepalived + nginx双主 实战

    安装nginx nginx 下载地址 http://nginx.org/download/nginx-1.8.0.tar.gz 安装nginx的依赖关系 yum install pcre pcre-d ...

  7. XPath 元素及属性查找

    实例 1 基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径 /AAA 选择根元素AAA       <AAA>      ...

  8. Webstrom快捷键大全

    20:32:59 Ctrl+/ 或 Ctrl+Shift+/          注释(// 或者 ) Shift+F6               重构-重命名 Ctrl+X             ...

  9. Sequence 分类: 栈和队列 2015-08-05 10:10 2人阅读 评论(0) 收藏

    Sequence Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 8277 Accepted: 2708 Description ...

  10. hdu Interesting Fibonacci

    Interesting Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...