shell变量的浅谈

变量本质上是存储数据的一个或多个计算机内存地址,变量的命令规则包括:

1) 不能使用程序中的保留字,如if, for

2) 变量由字母、下划线和数字组成,且不能以数字开头

3) 要求风名知义

4) 统一命名规则:驼峰命名法

变量主要分为本地变量、环境变量、局部变量、位置变量和特殊变量

(1)本地变量:只对当前shell进程有效,对当前shell进程以外的其它进程,包括子进程无效

变量直接赋值格式:name=value

也可以引用变量:

a. 可以是直接字串:name=root

b. 变量引用:name=$USER

c. 命令引用:name=`COMMAND` , name=$(COMMAND)

使用变量:

shell变量的浅谈 

注:变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界

已定义的变量,可以被重新定义,如:

shell变量的浅谈 

那么什么是只对当前进程有效呢?我们bash进入子shell发现echo $Myname没有任何反应,退出子shell,又能输出了

shell变量的浅谈 

注,同样的,假如我们再开一个进程,也会发现同样找不到$Myname这个变量名

显示所有已定义的变量:set

利用set可以查看所有的变量,包括环境变量

删除变量:unset name

(2)环境变量:只对当前shell及其子进程有效

环境变量的声明与赋值:

export name=VALUE

declare -x name=VALUE

如果你希望把你定义的变量让其他所有的shell程序都能用,也就是定义新的环境变量。需要用到export关键词,如:

shell变量的浅谈 

环境变量的特性:声明一个环境变量,在当前shell进程以及子shell进程中可用,父shell进程中不可用,这里的“可用”可以理解成父shell进程环境变量的一个复制,而不是继承父类的环境变量两者共用一份,因此子shell进程中对父shell进程的环境变量进行增、删、改、查均无影响。

显示所有环境变量:

env

printenv

export

declare -x

他们只显示环境变量

bash 内建的环境变量包括:

PATH:命令搜索路径。由冒号分隔,用于搜索命令

SHELL:当调用shell时,它扫描环境变量以寻找该名字。

USER:当前的用户为谁

UID:展开为当前用户的用户ID,在shell启动时初始化

HOME:家目录

PWD:当前工作目录

SHLVL:查看当前的shell为第几阶

LANG:查看当前默认的编码格式

MAIL:查看mail的路径

HOSTNAME:查看当前主机名

HISTSIZE:查看默认history缓存的历史记录条数

等等

删除变量:unset name

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

一般连续的字符串,数字,路径等可以不加任何引号,不过无引号的情况最好用双引号替代之。

如果变量中使用其他变量,则河以使用单引号否则无法使用,如下:

如果变量中有空格,就必须使用双引号否则就无法输出。

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

$1, $2…: 对应第一,第二等参数。获取当前执行shell脚本的第n个参数值(参数值默认空格区分,如果参数加了双引号,则将双引号的整个作为一个参数,不管其中是否有空格。),n=1..9, n0时表示脚本的文件名,如果大于9,用括起来。

$0: 命令本身

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

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

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

set — 清空所有位置变量

$0:是用来取脚本本身的名字,就是你命令之后跟的那个名字,如:

shell变量的浅谈 

$#: 获取当前传给脚本的所有参数的个数,一般用于控制参数个数。

shell变量的浅谈 

$?: 命令执行的返回值,0表示没有错误,其他表示有错误

shell变量的浅谈 

实例:

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

 

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

 

3、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

答案:

1.

[   “$@”  ]&&(cat $1 |grep “^[[:space:]]*$” |wc -l) ||(echo 至少应该给一个文件参数!;exit)

2.

ping -c1 -w1 $1 &> /dev/null && echo “IP地址可以访问!“||echo”IP地址不可访问!

3.

diskused_max=`df | grep sd|sort -nr -k5|head -1|tr -s ‘ ‘ %|cut -d% -f5`

inodeused_max=`df -i| grep sd|sort -nr -k5|head -1|tr -s ‘ ‘ %|cut -d% -f5`

[ “$diskused_max” -gt “80” ] && wall “空间即将满“||echo “空间使用率不超过80%”

[ “$inodeused_max” -gt “80” ] && wall “inode即将满“||echo “inode使用率不超过80%”

unset diskused_max inodeused_max

 

 

 

 

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

(0)
上一篇 2017-08-05 16:32
下一篇 2017-08-05 16:55

相关推荐

  • Linux 基础知识(六.一)

    一、模式及模式间的切换 (一)模式介绍 1、vim文本编辑器提供了三种基本模式,分别是编辑模式(命令模式)、输入模式以及末行模式(命令行模式) (二)模式间的切换 二、基础操作 (一)单文件的打开与关闭 1、单文件的打开:vim [options]… /path/to/somefile 2、单文件打开时的常用选项: (1)+#:表示当文件打开时,…

    Linux干货 2016-11-14
  • 马哥教育网络班21期+第11周课程练习

    1、详细描述一次加密通讯的过程,结合图示最佳。 单向加密:只能加密,不能解密,提取数据指纹(特征码),来保证数据的完整性,如上图的第二步,单向加密的协议有MD5,SHA等 非对称加密:公钥和私钥成对出现,私钥必须本机器保存,用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然,数字签名是私钥加密特征码,如上图的第三步;实现对称秘钥交换,如上图第五步 对称…

    Linux干货 2016-08-15
  • N26-第二周博客作业

    一、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 一) 目录管理命令 1. cd :用于切换目录。命令格式为:cd dirname 命令使用技巧: ~]# cd 进入用户主目录 ~]# cd – 进入上一次所在目录 ~]# cd / 进入根目录 ~]# cd ~ 进入用户主目录 ~]# cd .. 返回上一级…

    2017-03-01
  • LVS-net模型

    net模型拓扑图 注:rip的网关需指向DIP 搭建LVS net模式 基于httpd服务 首先准备三台主机 主机A 主机B 主机C 主机A(vs主机) 主机A设置两个IP 一个内网一个外网 #yum -y install ipvsadm #echo 1 > /proc/sys/net/ipv4/ip_forward :打开核心转发功能 #iptabl…

    Linux干货 2017-05-17
  • 文件查找(find)

                                  …

    2017-04-11
  • 优云携手网易云 助力企业“互联网+”转型

    12月16日,网易旗下“网易云”首届“网易云聚,共创未来”合作伙伴大会在网易杭州园区举行,优云(uyun.cn)成为首批授牌20家企业之一,并作为核心合作伙伴代表现场签署了合作伙伴协议。 右二为优云软件运营经理 柴勇 现场签署合作伙伴协议 会上,网易杭州研究院执行院长汪源介绍了网易云的战略生态全境,提出“产品体系+培训体系+服务体系”的网易云三大核心竞争力,…

    Linux资讯 2017-03-15