定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写
ip1=192.168.2.115
引用变量: $变量名 或 ${变量名}
查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)
取消变量: unset 变量名
作用范围: 仅在当前 shell 中有效
#!/usr/bin/bash
ip=10.19.219.44
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ]; then
echo "$ip is up"
else
echo "$ip is down"
fi
#!/usr/bin/bash
read -p "please input ip : " ip
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ]; then
echo "$ip is up"
else
echo "$ip is down"
fi
定义环境变量: 方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量: $变量名 或 ${变量名}
查看环境变量: echo $变量名 env 例如 env |grep back_dir2
取消环境变量: unset 变量名
变量作用范围: 在当前 shell 和子 shell 有效
=======================================================
C 语言 局部变量 vs 全局变量
SHELL 自定义变量 vs 环境变量
=======================================================
public.sh
#!/bin/bash
ip=1.1.1.1
dir_path=/etc/a.txt
export ip dir_path
1.sh
#!/bin/bash
echo $ip
echo $dir_path
在一个shell中运行public.sh
public.sh
#!/bin/bash
ip=1.1.1.1
dir_path=/etc/a.txt
1.sh
#!/bin/bash
chmod u+x ./public.sh
. public.sh
echo $ip
echo $dir_path
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的 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 '$$='$$
#!/bin/bash
if [ $# -eq 0 ]; then
echo "usage: `basename $0` file" #basename 用来只显示文件名 dirname文件夹
fi
if [ ! -f $1 ];then #-f 用来判断是不是个文件
echo "error 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
变量的赋值方式:
1. 显式赋值
变量名=变量值
示例:
ip1=192.168.1.251
school="BeiJing 1000phone"
today1=`date +%F`
today2=$(date +%F)
2. read 从键盘读入变量值 -p 提示信息 -t 等待时间 -n 输入长度
read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名
read -n 2 变量名
示例 3:
# vim first.sh
back_dir1=/var/backup
read -p "请输入你的备份目录: " back_dir2 echo $back_dir1
echo $back_dir2
# sh first.sh
示例 4:
# vim ping2.sh
#!/bin/bash
read -p "Input IP: " ip
ping -c2 $ip &>/dev/null
if [ $? = 0 ];then
echo "host $ip is ok"
else
echo "host $ip is fail"
fi
# chmod a+x ping2.sh # ./ping.sh
定义或引用变量时注意事项:
" " 弱引用
' ' 强引用
[root@tianyun ~]# school=1000phone
[root@tianyun ~]# echo "${school} is good"
1000phone is good
[root@tianyun ~]# echo '${school} is good'
${school} is good
` ` 命令替换 等价于 $() 反引号中的 shell 命令会被先执行
[root@tianyun ~]# touch `date +%F`_file1.txt # +%F 以yyyy-mm-dd 格式输出
[root@tianyun ~]# touch $(date +%F)_file2.txt
[root@tianyun ~]# disk_free3="df -Ph |grep '/$' |awk '{print $4}'" 错误
[root@tianyun ~]# disk_free4=$(df -Ph |grep '/$' |awk '{print $4}')
[root@tianyun ~]# disk_free5=`df -Ph |grep '/$' |awk '{print $4}'`