shell第二天变量

变量是用一个固定的字符串去表示一个不固定的内容,以便于修改。

自定义变量

定义变量

用户自定义变量是最常用的变量类型,其特点是变量名和变量值都是由用户去定义的。应该怎么定义变量呢?很简单,只需要执行Variablename=Variablevalue即可
比如:

  • 定义变量name
name=666
  • 输出变量name的值
echo $name

变量的定义和执行很简单,但是也要遵守一定的规则:

自定义变量是不可以以数字开头

2name="777"

shell编程第二天(变量)_自定义

自定义变量左右两侧不可以有空格

name = 777

shell编程第二天(变量)_变量名_02

变量的值如果有空格,必须用引号来进行包含

name="张三 666"

shell编程第二天(变量)_自定义_03


重复定义变量会进行变量叠加覆盖:

变量在叠加覆盖的时候一定要注意,在进行变量叠加的时候,变量名要""或者是${}进行包含,比如:

反复使用同一个变量的名字

name=zhangsan
echo $name
name=lisi
echo $name

shell编程第二天(变量)_bash_04

aa=123
echo $aa
aa="$aa"456# 这里aa输出的时候先会调用前面aa的值,这里的引号起的
echo $aa

shell编程第二天(变量)_自定义_05


还可以使用${}

aa=123
aa=${aa}789
echo $aa

shell编程第二天(变量)_bash_06


变量是可以反复赋值的,最后的结果是最后一个变量的值。

查看变量

可以铜鼓echo命令查询已经设定的变量的值,这种查询是已知变量名查询变量值,但是如果不知道变量名,那么可以查看系统中已经存在的变量吗?
它会将所有的系统中的变量给显示出来

set

可以配合管道命令进行使用

set | grep name

shell编程第二天(变量)_bash_07

删除变量

想要删除自定义变量,可以使用unset命令,命令格式如下:

unset 变量名称
unset aa
echo $aa

shell编程第二天(变量)_shell_08


还有一种特殊的情况:

bb=
echo $bb
set | grep bb

shell编程第二天(变量)_shell_09


经过查看系统中的变量可以得知,bb这个变量是存在的,只不过bb的变量的值是没有的。

示例

编写测试主机在线的脚本,当主机在线提示在线,当主机不在线提示不在线。

vi ./ping.sh
ping -c 1 192.168.83.172 &> /dev/null && echo 192.168.83.172up || echo 192.168.83.172down
# ip指的是要测试的主机的IP
# &&和||是三目表达式
# &&前面的命令成功,执行后面的命令
# ||前面的命名失败,执行后面的命令

执行程序

bash ping.sh

或者是chmod +x ping.sh 使用. ping.sh

shell编程第二天(变量)_变量名_10


使用这个测试主机在线的IP更改十分麻烦,可以尝试使用变量进行替代

vi ping.sh
#!/bin/bash
ip=192.168.83.172
ping -c1 $ip &> /dev/null && echo "$ip"up || echo ${ip} down

保存退出,执行文件进行尝试。

交互定义变量

交互定义变量:read 变量名称 ,read从键盘中读入变量的值

read -p "请输入您的姓名:" name
# read -p表示打印 打印的内容 变量
echo "宇宙最帅的人就是:"  $name

保存退出,执行文件

shell编程第二天(变量)_shell_11


同样将read命令应用在ping.sh中,

#!/bin/bash
# ip1=192.168.83.172
read -p "请输入您需要测试的第一个IP地址:" iP1
ping -c 1 $ip1 &> /dev/null && echo "$ip1"up || echo ${ip1}down

保存退出,执行文件

  • 总结
    变量的命名有以下的规则:

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
中间不可以有空格,可以使用下划线
不能使用标点符号
不能使用bash里的关键字(可以用help命令查看保留关键字)