简介 : shell 变量? 用一个固定的字符串去表示不固定的内容,便于修改。
1. 自定义变量
学习要点
定义变量: 变量名=变量值
引用变量: $变量名 或 ${变量名}
查看变量: echo $变量名; "set"可以查看所有变量(包括自定义变量和环境变量)
取消变量: unset 变量名
定义变量
[root@localhost ~]# name="xulei 666"
变量调用
#定义变量name
[root@localhost ~]# name="xulei 666"
#输出变量name的值
[root@localhost ~]# echo $name
重复定义变量
#定义变量aa的值是123
[root@localhost ~]# aa=123
#重复定义变量aa的值是源aa的值加上456
[root@localhost ~]# aa="$aa"456
输出123456
变量查看
[root@localhost ~]# set
变量删除
[root@localhost ~]# unset name
交互定义变量
read 从键盘读入变量值
赋值方式
read 变量名
示例
read -p "请输入您测试的IP地址:" ip
ping -c1 $ip &>/dev/null && echo " $ip up" || echo "$ip
down"
注意事项:3种引号
定义或引用变量时注意事项:
" " 弱引用
' ' 强引用
` ` 优先执行
双引号1
[root@localhost ~]# schoo=1000 phone
错误示范,shell把空格识别做命令分隔符。
bash: phone: 未找到命令
[root@localhost ~]# schoo="1000 phone"
正确示范,变量值中的空格,被转义为一个普通符号
[root@localhost ~]# echo $schoo
1000 phone
执行成功。
双引号2
[root@localhost ~]# schoo=$schoo is good
错误示范,已有变量的基础上,再追加内容。
bash: is: 未找到命令
没有加引号,被识别为两条命令
[root@localhost ~]# schoo="$schoo is good"
正确示范,加了双引号。组成了整体,空格失去含义。
[root@localhost ~]# echo $schoo
1000 phone is good
成功
单引号
[root@localhost ~]# schoo='$schoo 666'
单引号,转义一切符号
[root@localhost ~]# echo $schoo
$schoo 666
$也被转义了。一切都被转义了。
反引号
[root@localhost ~]# schoo=`date`
反引号是优先执行。先执行date的命令,再执行定义变量。
[root@localhost ~]# echo $schoo
2020年 05月 06日 星期三 14:57:13 CST
所以看到变量的结果,是时间
注意
变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
起变量名,请使用五个字母以上。
2. 整数运算
方法一:expr
语法
expr 1 + 2
expr $num1 + $num2
+加
-减
\*乘(*是任意字符,使用\ 转义一下。)
/除
%取余
3. 小数运算(了解)
echo "2*4" |bc
echo "2^4" |bc
echo "scale=2;6/4" |bc
4. 环境变量(了解)
定义环境变量:
直接声明:方法一 export back_dir2=/home/backup
转换声明:方法二 export back_dir1 将自定义变量转换成环境变量
5. 位置变量和预定义变量(了解)
命令 参数1 参数2 参数3 ....9以后特殊定义
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ...
预定义变量
$0 脚本名/程序名
$* 所有的参数
$# 参数的个数
$? 上一个程序的返回值(0是成功,非零失败)
$$ 程序的PID
总结
1.位置变量就是$1,$2,$3,$4
2.位置变量预先已经被定义过了。
3.用户使用时,必须携带参数。
4.位置变量不是程序设计的唯一方法。比如read也可以。