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

相关推荐

  • 萝卜运维记–第一周

    part1— ①描述计算机的组成及功能 ▲计算机是什么? 计算机(ENIAC):简述—-接收用户的指令,经过中央处理器处理过后,产生对使用者有用的信息。具有存储记忆,处理复杂数据运算的计算机器 Ⅰ 计算机组成及功能 ☆硬件部分: 1.中央处理器CPU(Central Processing Unit)↓↓↓↓:  &n…

    Linux干货 2016-12-06
  • 文本处理工具

    文件 查看命令:cat, tac,revcat [OPTION]… [FILE]…-E: 显示行结束符$-n: 对显示出的每一行进行 编号-A :显示所有控制符-b: : 非空行编号-s :压缩连续的空行成一行 分页查看文件内容more: 分页查看文件more [OPTIONS…] FILE…-d: 显示翻页及…

    Linux干货 2017-03-17
  • LAMP基于rsyslog+loganalyzer实现日志集中管理及分析

    前言 作为一名运维工程师,查看分析系统日志是每天必做的功课,但每次查看日志都得一台服务器一台服务器的看,几台服务器还可以这么对付,但如果管理成百上千台线上服务器,这种方法就捉襟见肘了。于是我们就需要用到日志服务器了,但是如何能让它更直观的显示呢?loganalyzer是一个不错的选择,本文将讲解如何使用rsyslog+loganalyze实现日志统一管理及分…

    Linux干货 2015-04-27
  • shell脚本编程之函数、case语句

    一、函数 调用函数前必须先定义,调用时仅使用函数名即可。 语法: function  函数名 {      函数体 } 也可表示为: 函数名 () { 函数体 } 示例:写一个脚本,判定网络内有哪些主机在线,在线的用绿色显示,不在线的用红示表示: c_net&…

    Linux干货 2015-08-24
  • 正则表达式和变量写脚本

    #!/bin/bash 检查系统所有用户的shell是否为bash? 注释:用grep查找是否有此类用户,如果有则为真,则$?必然为0;显示的passwd结果对我们没意义,所以重定向到空。  grep “\bbash\b$” /etc/passwd &> /dev/null  A=`echo $?` …

    Linux干货 2017-04-16
  • lamp的搭建

    方法一编译安装amp:   1.系统环境:CentOS 6,7       CentOS6:apr,apr-util的版本为1.3.9,不适合httpd-2.4    CentOS7:apr,apr-util的版本为1.4+2.开发环境需要安装:    Developm…

    Linux干货 2016-10-16

评论列表(1条)

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

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