位置变量在Shell脚本编程中的作用

位置变量:

        如果要向一个shell脚本传递信息,可以使用位置参数完成此功能;参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问,使用shift命
令可以改变这个限制;参数从第一个开始,在第九个结束;每个访问参数前要加$符号;第一个参数为0,表示预留保存实际脚本名字;无论脚本是否有参数,此值
均可用.

变量名:

$0,

$1,

$2,

$3,

$4,

$5,

$6,

$7,

$8,

$9

说明:

$0: 表示脚本名称。

$1,$2,…,$9:$1表示向脚本传递的第一个参数,$2表示向脚本传递的第二个参数,…,$9表示向脚本传递的第九个参数.

特殊变量(参数)

shell对一些参数做特殊处理,这些参数只能被引用而不能被赋值.

特定shell变量如下:

$# 传递到脚本的参数个数;

$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个;

$$ 脚本运行的当前进程ID号;

$! 后台运行的最后一个进程的进程ID号;

$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数;

$- 显示shell使用的当前选项,与set命令功能相同;

$? 显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误;

示例:

[root@localhost bin]# cat test.sh
#!/bin/bash
#
#
#
#
echo "此脚本的名称$0为:$0"
echo "此脚本的第一个位置参数$1为:$1"
echo "此脚本的第二个位置参数$2为:$2"
echo "此脚本的第三个位置参数$3为:$3"
echo "此脚本的第四个位置参数$4为:$4"
echo "此脚本的第五个位置参数$5为:$5"
echo "此脚本的第六个位置参数$6为:$6"
echo "此脚本的第七个位置参数$7为:$7"
echo "此脚本的第八个位置参数$8为:$8"
echo "此脚本的第九个位置参数$9为:$9"
echo "此脚本的第十个位置参数$10为:$10"
echo "此脚本的参数的个数为:$#"
echo "此脚本的所有参数为$*"
echo "此脚本的所有参数为$@"

此脚本输出结果为:

[root@localhost bin]# pos.sh `seq 1 10`
此脚本的名称/root/bin/pos.sh为:/root/bin/pos.sh
此脚本的第一个位置参数1为:1
此脚本的第二个位置参数2为:2
此脚本的第三个位置参数3为:3
此脚本的第四个位置参数4为:4
此脚本的第五个位置参数5为:5
此脚本的第六个位置参数6为:6
此脚本的第七个位置参数7为:7
此脚本的第八个位置参数8为:8
此脚本的第九个位置参数9为:9
此脚本的第十个位置参数10为:10
此脚本的参数的个数为:10
此脚本的所有参数为1 2 3 4 5 6 7 8 9 10
此脚本的所有参数为1 2 3 4 5 6 7 8 9 10

$* 和 $@ 的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。

但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

下面的例子可以清楚的看到 $* 和 $@ 的区别:

  1. #!/bin/bash

  2. echo "\$*=" $*

  3. echo "\"\$*\"=" "$*"


  4. echo "\$@=" $@

  5. echo "\"\$@\"=" "$@"


  6. echo "print each param from \$*"

  7. for var in $*

  8. do

  9. echo "$var"

  10. done


  11. echo "print each param from \$@"

  12. for var in $@

  13. do

  14. echo "$var"

  15. done


  16. echo "print each param from \"\$*\""

  17. for var in "$*"

  18. do

  19. echo "$var"

  20. done


  21. echo "print each param from \"\$@\""

  22. for var in "$@"

  23. do

  24. echo "$var"

  25. done

执行 ./test.sh "a" "b" "c" "d",看到下面的结果:

$*=  a b c d
"$*"= a b c d
$@=  a b c d
"$@"= a b c d
print each param from $*
a
b
c
d
print each param from $@
a
b
c
d
print each param from "$*"
a b c d
print each param from "$@"
a
b
c
d

原创文章,作者:YOUNG,如若转载,请注明出处:http://www.178linux.com/35639

(0)
YOUNGYOUNG
上一篇 2016-08-15 12:10
下一篇 2016-08-15 12:10

相关推荐

  • 磁盘管理(SWAP、dd、quota、RAID、LVM)

    2016-08-26: 授课内容: 1、SWAP交换分区的创建 2、dd命令的使用 3、设定文件系统配额 4、设定和管理软RAID设备 5、配置逻辑卷、逻辑卷快照 1、swap (1)SWAP分区:模拟内存,当物理内存不足时,进程需要内存资源是,内存会把一部分没有在用的进程分页挪到硬盘的模拟内存中,腾出空间被现在需要使用内存资源的进程 即其作用是可以允许内存…

    Linux干货 2016-09-01
  • zabbix报警信息提取

    zabbix报警信息提取     在日常的监控中,我们除了日常的zabbix操作外,我们有的时候还涉及到与其他公司进行数据对接。由于别的公司的数据对接很多时候并不是按照zabbix的数据结构(尤其是大型厂家,或是专业监控厂家,并不会直接使用zabbix,多数是自己开发或是对其他监控软件进行二次开发之类),在这种需求基础…

    Linux干货 2015-12-19
  • N25-第一周博客作业

    计算机的组成及其功能 Linux的发行版介绍 Linux的哲学思想 Linux命令格式及一些基础命令 在Linux系统上获取命令的帮助信息 Linux发行版的基础目录 计算机的组成及其功能 简单来说,计算机系统是由 硬件系统(hardware system)和 软件系统(software system)两部分组成。 硬件的基本组成: 运算器、存储器、控制器、…

    Linux干货 2016-12-02
  • 网络基础

    1、OSI模型七层结构 应用层   为应用程序进程提供网络服务   提供用户身份验证   表示层     确保接收系统可以读出该数据     格式化数据     构建数据 &nbs…

    Linux干货 2016-09-06
  • fstab配置文件、swap分区,文件关联

    fstab配置文件、swap分区,文件关联,lvm 挂载点和/etc/fstab  配置文件系统体系  被mount、 fsck和其它程序使用  系统重启时保留文件系统体系  可以在设备栏使用文件系统卷标  使用mount -a 命令挂载/etc/fstab中的所有文件…

    Linux干货 2016-09-01
  • 马哥教育网络21期+第6周博客练习

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s@\(^[[:space:]]\+\)@#&@g # Let rhgb know that we&#0…

    Linux干货 2016-08-15

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-16 14:51

    对各变量总结的很清晰,也通过写脚本加深自己对变量的理解,课堂练习需要认真完成哦,