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

相关推荐

  • 马哥教育网络班20期 第9周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash #the purpose of program : # #08/11/2016  PATH=/bin:/sbin:…

    Linux干货 2016-08-15
  • linux中的vim

    什么是vim:     Linux 在命令行下的文本编辑器,很多个别软件的编辑接口都会主动调用vim,所以在 Linux 的系统中使用文字编辑器来编辑你的Linux参数配置文件,在 Linux 的世界中,绝大部分的配置文件都是以 ASCII 的纯文本形态存在,因此利用简单的文字编辑软件就能够修改设置.所有的Unix L…

    Linux干货 2016-08-11
  • N22-妙手 第4天视频课程练习

    一、Globbing文件名通配练习 练习1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现任意一位字符的目录 [root@localhost ~]# ls -d /var/l?[[:lower:]] /var/lib  /var/log 练习2:显示/etc目录下,以任意一位数字开头…

    Linux干货 2016-08-22
  • keepalived的初级使用

        1、双主模型的ipvs高可用   一、双主模型的ipvs高可用     1)网络结构图       2)、ipvs的类型是dr模型,调度算法是rr       RS1和RS2都是centos6.8 对RS1和RS2的配置:…

    Linux干货 2017-05-15
  • Linux的哲学思想

    2018-03-03

    Linux干货 2018-03-03

评论列表(1条)

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

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