五、shell变量
什么是变量?
变量的类型
变量的定义方式
变量的运算
变量“内容”的删除和替换
Shell 变量?用一个特定的字符串去表示不固定的内容
变量的类型:
- 自定义变量
定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.18.185
引用变量: $变量名 set(所有变量:包括自定义变量和环境变量)
取消变量: echo $变量名
作用范围: 尽在当前shell中有效
例子:
#!/bin/bash
ip=152.136.123.149
ping -c1 $ip &>/dev/null && echo "$ip is up" || echo "$ip is down!"
#!/bin/bash
ip=152.136.123.149
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ]; then
echo "$ip is up"
else
echo "$ip is down"
fi
#!/bin/bash
echo "请输入你要测试的IP"
read ip
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ]; then
echo "$ip is up"
else
echo "$ip is down"
fi
#!/bin/bash
read -p "请输入你要ping的IP" ip
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ]; then
echo "$ip is up"
else
echo "$ip is down"
fi
#!/bin/bash
ping -c1 $1 &>/dev/null
if [ $? -eq 0 ]; then
echo "$1 is up"
else
echo "$1 is down"
fi
- 环境变量
定义环境变量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例子:env | grep back_dir2
取消环境变量: unset 变量名
变量作用范围:在当前shell和子shell有效
C语言 | 局部变量 vs 全局变量 |
---|---|
Shell | 自定义变量 vs 环境变量 |
echo $USER echo $UID echo $MAIL echo $AHELL
echo $HOME echo $PWD
- 位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
- 预定义变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台的进程PID
$? 上一个命令的分返回值0表示成功
示例:
#vim test.sh
echo "第一个参数$1"
echo "第二个参数$2"
echo "所有参数是:$@"
echo "所有参数是:$*"
echo "所有参数个数是:$#"
echo "当前进程的PID是:$$"
echo '$1'=$1
echo '$2'=$2
echo '$@'=$@
echo '$*'=$*
echo '$#'=$#
echo '$$'=$$
了解 ∗ 和 *和 ∗和@的区别
#vim pp.sh
#!/bin/bash
ping -c2 $1 &>/dev/null
if [ $? = 0 ];then
echo "host $1 is ok"
else
echo "host $1 is fail"
fi
#chmod u+x pp.sh
现在做个小测试:
现在写一个脚本,让他ping ip.txt文件内的ip,如果ping通则告诉我is up ;如果ping不同则告诉我is down。另外在脚本文件里面添加一些脚本使其在没有用户参数时提示操作者添加参数、如果添加的不是文件就报错。
Ip.txt文件内的内容:
152.136.123.149
www.baidu.com
192.168.12.231
答案:
#!/bin/bash
#如果用户没有加参数
if [ $# -eq 0 ];then
echo "usage: `basename $0` file"
exit
fi
if [ ! -f $1 ];then
echo "erro file"
exit
fi
for ip in `cat $1`
do
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip is up"
else
echo "$ip is down"
fi
done