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

相关推荐

  • sed的使用和脚本练习

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#。 cp /etc/rc.d/rc.sysinit /tmp sed -i ‘s/\(^[[:space:]]\)/#\1/g’ /tmp/rc.sysinit 2、复制/boot/grub/grub.conf至/t…

    Linux干货 2017-08-06
  • grep命令及正则表达式

    grep命令和正则表达式 grep基本概念 grep:global search regular expression and print out the line. 作用:文本过滤器,用于文本搜索,用指定“模式”逐行匹配。 模式:由正则表达式字符及文本字符所编写的过滤条件 正则表达式:由一类特殊字符和文本字符所编写的模式,其有些字符不表示字符字面意义,而表…

    Linux干货 2016-11-05
  • read,locate ,find 的总结及相关联系

    read 变量名 read 变量名1 [变量名2] < 文件名不支持管道read 变量名1 [变量名2] <<< “值1 [值2] …”使用read来把输入值分配给一个或者多个shell变量     -p 指定要显示的提示     # read -p…

    Linux干货 2017-08-12
  • 任务计划2

    [root@localhost app]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/root/bin MAILTO=root   # For details see man 4 crontabs   # Example of job defi…

    Linux干货 2017-05-15
  • httpd配置支持https

    httpd配置支持https 建一台私有CA 配置httpd支持ssl协议以及使用证书 测试基于https访问的相应主机 rpm包安装的httpd https https 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,也被称为HTTP over TLS,HTTP over SSL或HTTP …

    Linux干货 2016-12-21
  • 高级文件系统管理之磁盘配额及RAID的运用

    本章内容 设定文件系统配额 设定和管理软RAID设备 一,概述 配置配额系统: 综述 在内核中执行 以文件系统为单位启用 磁盘配额最小单位是以文件系统为单位启用,就是一个挂载点,而不能以目录为单位 对不同组或者用户的策略不同 根据块或者节点进行限制 执行软限制(soft limit) 硬限制(hard limit) 初始化 分区挂载选项:usrquota、g…

    Linux干货 2016-09-07

评论列表(1条)

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

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