(二)shell变量

(1)自定义变量

  • 定义变量 变量名=变量值 变量名必须以字母或下划线开头,不能数字开头,区分大小写,ip=114.114.114.114
  • 引用变量: $变量名 ${变量名}
  • 查看变量: echo $变量名 或set(查看所有自定义变量和环境变量)
  • 取消变量: unset 变量名
  • 作用范围: 仅在当前shell中生效
  • 变量赋值之直接赋值
#!/bin/bash
ip=114.114.114.114
if ping -c1 $ip &>/dev/null;then
        echo "$ip is up"
else
        echo "$ip is down"
fi
  • read方式赋值
#!/bin/bash
#read:用户终端输入的值赋予变量ip,-p选项只是给用户一个提示可以省略
read -p "please touch a ip:" ip
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ];then
        echo "$ip is up"
else
        echo "$ip is down"
fi
  • 位置变量赋值:$1 $2 ;执行脚本后面的参数,例如114.114.114.114传给$1,114.114.115.115传给$2
ping -c1 $1 &>/dev/null
if [ $? -eq 0 ];then
        echo "$1 is up"
else
        echo "$1 is down"
fi
执行脚本:bash ping01.sh 114.114.114.114  114.114.115.115
  • 自定义变量只在当前shell生效
在当前shell定义变量:name1=123
 cat test.sh 
echo $name1
bash test.sh  发现为空,说明定义变量只在当前shell生效,bash方式执行在子shell,说明自定义变量只在当前shell生效,如果想调用,需要使用export name1把变量修改成环境变量

(2)环境变量

  • 定义环境变量:
方法一:export 变量名=变量值
方法二:export 自定义变量名
  • 引用变量:$变量名 ${变量名}
  • 查看环境变量:echo $变量名 或 export
  • 取消环境变量:unset 变量名
  • 变量作用范围:在当前shell和子shell中有效
  •  系统自带的环境变量: $USER $PWD
    

(3)位置变量

  • 位置变量:不用事先定义
$1	$2	$3 ${10}

(4)预定义变量

$0	脚本名
$*	所有的参数
$@	所有的参数
$#	参数的个数
$$	当前进程的PID
$!	上一个后台进程的PID,例如ls &
$?	上一个命令的返回值,0表示成功,非0表示失败
  • 位置变量和预定义变量例子
if [ $# -eq 0 ];then
        echo "Usage $(basename $0) file"
        exit
fi
if [ ! -f $1 ];then
        echo "$1 is 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

(5)变量赋值

  • 显示赋值:变量名=变量值
ip1=114.114.114.114
name="wang tian"
today1='date +%F'
today2=$(date +%F)
  • read方式赋值
read 变量名
read -p "" 变量名
read -t 2 -p "" 变量名
read -n 2 变量名
  • 例子:
#!/bin/bash
read -p "请输入你的姓名,性别,年龄 [ e.g wf m 20 ]" name sex age
echo "你的姓名是$name,性别:$sex,年龄:$age"
  • 变量引用注意事项
""  :强引用,引用变量
''	:弱引用,不引用变量
  • 命令的结果作为变量
命令替换:$() 相当于两个反引号 ,反引号中的shell会被先执行
touch ’date +%F’_file.txt      注意是反引号哦,这里markdown原因我改成单引号了
原文地址:https://www.cnblogs.com/lovelinux199075/p/8873663.html