今天给伙伴们分享一下Shell 编程-Shell 变量,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
1、Shell 变量(实时动态变化)
- 用一个固定的字符串去表示不固定的内容
2、变量的类型
1、自定义变量
- 定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115 见名知意
- 引用变量: $变量名 或 ${变量名}
- 查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)
- 取消变量: unset 变量名
- 作用范围: 仅在当前Shell中有效
2、环境变量
- 定义环境变量:
- 方法一 export back_dir2=/home/backup
- 方法二 export back_dir1 将自定义变量转换成环境变量
- 引用环境变量: $变量名 或 ${变量名}
- 查看环境变量: echo $变量名 env 例如 env | grep back_dir2
- 取消环境变量: unset 变量名
- 变量作用范围: 在当前Shell和子Shell有效
3、位置变量
- $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
4、预定义变量
- $0 脚本名(自己本身)
- ∗ 所有的参数 " * 所有的参数 " ∗所有的参数"*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数
- @ 所有的参数 " @ 所有的参数 " @所有的参数"@" 会将各个参数分开,以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数
- $# 参数的个数
- $$ 当前进程的PID
- $! 上一个后台进程的PID
- $? 上一个命令的返回值 0表示成功
示例1:
# vim test.sh
echo "第2个位置参数是$2"
echo "第1个位置参数是$1"
echo "第4个位置参数是$4"
echo "所有参数是: $*"
echo "所有参数是: $@"
echo "参数的个数是: $#"
echo "当前进程的PID是: $$"
echo '$1='$1
echo '$2='$2
echo '$3='$3
echo '$*='$*
echo '$@='$@
echo '$#='$#
echo '$$='$$
for i in $*
do
echo "脚本的参数是 $i "
done
for j in $@
do
echo "脚本的参数 $j"
done
# 不加引号,$* 和 $@ 获取的值是一样的
for i in "$*"
do
echo "脚本的参数是 $i "
done
for j in "$@"
do
echo "脚本的参数 $j"
done
# 加引号$* 获取的值是一行(所有参数合并到一行) $@ 获取的值和参数个数相同(每个参数一个值)
示例2:
# vim ping.sh
#!/bin/bash
ping -c2 $1 &>/dev/null
if [ $? = 0 ];then
echo "host $1 is ok"
else
echo "host $1 is fail"
fi
[root@edenluo ~]# chmod a+x ping.sh
[root@edenluo ~]# ./ping.sh 192.168.2.25
4、变量的赋值方式
1、显式赋值
-
变量名=变量值
-
示例:
ip1=192.168.1.251
school="BeiJing 1000phone"
today1=`date +%F`
today2=