SHELL脚本编程之变量的种类

  1. 变量

    在进行脚本编程的时候,经常会使用到不同类型的变量,根据变量的生效范围,可大致分为以下的几类:

    • 本地变量:生效范围为当前shell进程,对当前shell之外的其他shell进程,包括当前shell进程的子shell进程都是无效的,它的作用域就是当前shell进程

      blob.png

    • 环境变量:生效范围是当前shell进程及其子进程

      blob.png

    • 局部变量:生效范围是当前shell进程中某段代码(通常为函数)

    • 位置变量:$1,$2…表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数

      blob.png

    • 特殊变量:$?,$0,$*,$@,$#

    位置变量:在脚本代码中调用通过命令行传递给脚本的参数

    • $1,$…:对应第1,第2等参数,shift[n]换位置

      blob.png

      blob.png

    • $0:命令本身

      blob.png

    • $*:传递给脚本的所有参数,全部参数合为一个字符串

    • $@:传递给脚本的所有参数,每个参数为独立字符串

      blob.png

      blob.png

    • $#:传递给脚本的参数的个数

      注:$@ $* 只有在被双引号包起来的时候才会有差异

    $@和$*都表示传递给脚本的所有参数,当如上图中这样使用时,它们的作用效果一样,但当引用的时候分别加上参数时,它们两个就有了区别,如下图:

    blob.png                    blob.png blob.png

    从上图结果可以看出,使用了"$@"的位置变量,其输出结果把输入的三个数字当作了一个字符串,捆绑在了一起,所以输入了三个数,但是就显示了第一个数,而且第一个数就把所有数当作一个字符串输出,第二第三个数就没有输出,使用了"$*"的位置变量,它的输出结果就是正常的,虽然最后两者输出结果一样,但两者还是存在着是否当成一个整体输出处理的区别

  2. 习题

    1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。

    blob.png

    blob.png

    2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中

    blob.png

    blob.png

    3、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利用率最大的值

    blob.png

    blob.png

    4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

    blob.png
    blob.png

    5、写一个脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和

    blob.png

    blob.png

    6、写一个脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和

    blob.png

    blob.png

    7、写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件

    blob.png

    blob.png

    8、写一个脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

    blob.png

    blob.png

    9、写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该

    IP地址不可访问”

    blob.png

    blob.png

    10、chmod -rw /tmp/file1,编写脚本/root/bin/per.sh,判断当前用户对/tmp/fiile1文件是否不可读且不可写

    blob.png

    blob.png

    blob.png

    11、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统。

    blob.png

    12、写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,先判断是否合格IP,否,提示IP格式不合法并退出,是,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

    blob.png

    blob.png

    13、计算1+2+3+…+100的值

    blob.png

    blob.png

    14、计算从脚本第一参数A开始,到第二个参数B的所有数字的总和,判断B是否大于A,否提示错误并退出,是则计算之

blob.png

blob.png

blob.png

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

(0)
Stupid_LStupid_L
上一篇 2016-08-12
下一篇 2016-08-12

相关推荐

  • 关于大型网站技术演进的思考(十)–网站静态化处理—动静整合方案(2)

    原文出处: 夏天的森林    上篇文章我简要的介绍了下网站静态化的演进过程,有朋友可能认为这些知识有点过于稀松平常了,而且网站静态化的技术基点也不是那么高深和难以理解,因此它和时下日新月异的web前端技术相比,就显得不伦不类了。其实当我打算写本系列的之前我个人觉得web前端有一个点是很多人都知道重要,但是有常常低估它作用的,那就…

    2015-03-11
  • LVM

       本节主要为raid和LVM相关 一、作业 1、创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项 2、写一个脚本,完成如下功能: (1) 列出当前系统识别到的所有磁盘设备 (2) 如磁盘数量为1,则显示其空间使用信息 …

    Linux干货 2016-08-30
  • shell编程之数组及环境变量

    数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的 集合 索引:编号从0 声明数组: declare -a ARRAY_NAME declare -A ARRAY_NAME:关联数组 1.declare  -a menu  menu[0]=beef  menu[1]=chicken menu…

    Linux干货 2016-08-29
  • root用户密码破解

    方法一:进入单用户模式破解root密码 (1)编辑grub菜单(选定要编辑的title,而后使用e命令) (2)在选定的kernel后附加 1,s,S或single都可以 (3)在kernel所在行键入"b"命令即可进入单用户模式 (4)运行passwd命令修改root用户密码 并重启 (5)输入密码即可登录 方法二:进入救援模…

    Linux干货 2016-09-15
  • 作业权限管理

    一、在/data/testdir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。 首先创建三个组g1,g2,g3,题目要求在/data/testdir目录里创建的文件自动属于g1组那么首先要将这个目录的属组改为g1,然后通过更改…

    Linux干货 2016-08-03
  • LINUX初次见面

    LINUX的文件系统 在Linux的眼睛中,一切都为文件,这也是Linux的中心哲学思想。正因如此造就了一个性能稳定,功能强大,效率高的操作系统。Linux有自己的层级标准,它定义了每个系统分区的用途,和所需要的最小构成文件目录。由不同的文件来完成不同的功能造就了一个Linux的完整生态。 linux的文件系统格式比较丰富,它的核心系统能支持十多种文件系统类…

    2017-05-18

评论列表(1条)

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

    文章层次结构分明,态度端正,加油!!!