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 14:45
下一篇 2016-08-12 14:45

相关推荐

  • HA Cluste 的配置:keepalived:vrrp协议 主备模型

    keepalived:vrrp协议 主备模型 第一步配置出始环境: 准备两节点: 主节点:172.18.57.7 long1 备节点:172.18.57.8 long2 (1) 各节点时间必须同步; 同步时间: ~]# yum -y install chrony ~]# vim /etc/chrony.conf ~]# systemctl start chr…

    Linux干货 2017-05-15
  • NFS服务器设置

    一、NFS的相关概念     NFS(Network File System)即网络文件系统的缩写,由Sun公司研发,其目的是为了解决网络文件共享的问题。用户可以实现像挂载本地文件系统一样挂载NFS服务器的共享目录;其具有配置简单、使用高效的特点,但只能在Linux系统使用,不能跨平台使用。 &nb…

    Linux干货 2015-06-25
  • RPM及YUM工具介绍及使用(上)

    写在前面 常见的计算机硬件平台大致可以为分:x86、x86_64、amd64、ppc、arm、aarch64。软件平台,在Linux界则是指不同的Linux发行版。 Linux系统中的软件(非源码)由于都是在不同的硬件+软件平台开发编译完成之后发布的,因此同一个软件会区分硬件和软件环境而有不同的软件包。在安装软件时应该选择与自己的硬件和软件平台一致的软件包进…

    Linux干货 2016-12-26
  • find命令详解

    写在前面,命令总览: 文件名:-name  -iname   glob     从属关系: -user  -group  -uid  –gid  -nouser  -nogroup 按类型:-type []  ,f,d,l,b,c…

    Linux干货 2016-02-14
  • LVS DR模式

    一、测试环境说明 操作系统:CentOS6.7-X64 IP_VS版本:1.2.26 DR:10.10.10.130 VIP:10.10.10.140 RS1:10.10.10.131 RS2:10.10.10.132 二、LVS-DR模式原理 a)客户端发送一个请求(源地址为CIP,目标地址为VIP,我们简称为CIP:VIP)到LVS的DR b)通过在调度…

    Linux干货 2016-09-19
  • linux命令速记技巧

    linux命令速记技巧 linux命令有一定的命名规则,一个正常的coder在编码的过程中都会考虑命名的语义化,开发者对函数的命名一定也尽量遵循这个规律.了解目录所对应的英文全称有助于自己的记忆,理解记忆获得知识的留存率要远大于死记硬背.如果英文基础太差,小编建议先学好英文基本功再来学习这些命令. 命令的中文对照 命令 英文全称 中文释义 ls list 列…

    Linux干货 2017-03-25

评论列表(1条)

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

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