1.自定义变量
定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.225.164
引用变量: $变量名 或 ${变量名}
查看变量: echo $变量名; "set"可以查看所有变量(包括自定义变量和环境变量)
取消变量: unset 变量名
作用范围: 仅在当前shell中有效
示例:
使用变量前。麻烦
vim ping.sh
#!/usr/bin/bash
ping -c1 192.168.100.10 &>/dev/null && echo 192.168.100.10up || echo 192.168.100.10down
两个&&符号代表前面结果是正确是输出后面的 ||表达的是否则的意思 前面结果错误时输出
重复项特别多,改起来特别麻烦
使用变量后,简洁
vim ping.sh
#!/bin/bash
ip=192.168.100.10
ping -c1 $ip &>/dev/null && echo "$ip up" || echo "$ip down"
显示赋值
变量值已经知道的
定义变量
定义命令执行的结果
time=`date +%F` (反撇)
time=$(date +%F)($小括号)
time="li li"
隐式赋值(交互式变量)
read 从键盘读入变量值
read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名 //-t 等待5秒,后超时
read -n 2 变量名 //-n 只记录几个字符
vim ping.sh
read -p "请输入您测试的IP地址:" ip
ping -c1 $ip &>/dev/null && echo " $ip up" || echo "$ip down"
环境变量
定义环境变量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自 定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例如env |grep back_dir2
取消环境变量: unset 变量名
变量作用范围: 在当前shell和子shell有效 !!!!!!!!!!!!!!!!!!!!!!!
位置变量和预定义变量
位置变量
命令 参数1 参数2 参数3 …9以后特殊定义
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} …
*预先定义过的变量
$0 脚本名
$ 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值 0表示成功
定义或引用变量时注意事项:
1
" " 弱引用
’ ’ 强引用
[root@lwq ~]# school=1000phone
[root@lwq ~]# echo "${school} is good" //脱去空格
1000phone is good
[root@lwq ~]# echo '${school} is good' //脱去所有字符
${school} is good
2
``(反撇)优先执行
``(反撇) 命令替换 等价于 $() 反引号中的shell命令会被先执行
两种方法都行
[root@lwq ~]# touch `date +%F`_file1.txt
[root@lwq ~]# touch $(date +%F)_file2.txt
变量运算
- 整数运算
方法一:expr
```yaml
expr 1 + 2
expr $num1 + $num2 + - \* / %
*是任意字符,使用\ 转义一下。
方法二:$(())
```powershell
echo $(($num1+$num2)) + - * / %
echo $((num1+num2))
echo $((5-3*2))
echo $(((5-3)*2))
echo $((2**3)) //(蜜)2的3次方
sum=$((1+2)); echo $sum
方法三:$[]
echo $[5+2] + - * / %
echo $[5**2]
方法四:let
let 表达式
let sum=2+3; echo $sum
let i++; echo $i
let ++i; echo $i
i++和++i的区别就是:
i++
:先引用,后增加
++i
:先增加后引用
小数运算:
yum install bc -y
echo "2*4" |bc
echo "2^4" |bc
echo "scale=2;6/4" |bc
awk 'BEGIN{print 1/2}'
echo "print 5.0/2" |python
bc:交互运算器(计算器 要自己安装 yum install bc -y)
scale=2 保留小数点后面两位
awk和python做了解