Shell变量
Posted shi_zi_183
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell变量相关的知识,希望对你有一定的参考价值。
Shell变量
Shell变量的类型
环境变量
环境变量也可称为全局变量,可以在创建它们的Shell及其派生出来的任意子进程Shell中使用,环境变量的说明如表
定义自定义变量 | 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 如ip1=192.168.2.115 |
---|---|
使用自定义变量 | $变量名 或$变量名 |
查看自定义变量 | echo $变量名 或 env 例如env|grep back_dir1 |
取消自定义变量 | unset变量名 |
环境变量作用范围 | 仅当前Shell中有效 |
系统中环境变量的配置文件有/etc/profile
、~/.bashrc
和~/.bash_profile
…其中/etc/profile
这是系统最主要的Shell设置文件,也是用户登陆时系统最先检查的文件,有关重要的环境变量都定义在此,包括PATH、USER、UID、MAIL、SHELL等。
查看所有的环境变量
env|grep USER
env|grep SHELL
env|grep HIS
查看变量的值
echo $PATH
echo ${PATH}
{}的作用
echo ${#PATH}
echo ${PATH}:/new/bin
echo $PATH:/new/bin
全局作用域与局部作用域区别
环境变量具有全局作用域
1.sh
echo "ip1 is: $ip1"
echo "ip2 is: $ip2"
vi 1.sh
ip1=3.3.3.3
chmod a+x 1.sh
export ip2=4.4.4.4
./1.sh
export ip1
./1.sh
编程时尽量不定义环境变量
public.sh
ip1=1.1.1.1
dir_path=/etc/a.txt
2.sh
. public.sh
echo $ip1
echo $dir_path
. 2.sh
注:可以看到我们两个案例中启动shell的方式不同,
1、./1.sh
表示使用子进程打开1.sh
2、. 2.sh
表示使用当前进程打开2.sh
不同启动方式会导致不同的变量继承,影响程序运行。
位置变量
在Shell中存在一些位置变量。位置变量用于在命令行、函数或脚本中传递参数,其变量名不用自己定义,其作用也是固定的。执行脚本时,通过在脚本后面给出具体的参数(多个参数用空格隔开)对相应的位置变量进行赋值。
$0
表示命令本身,$1-$9
表示接收的第1~9个参数,$10
以上需要用{}
括起来,如${10}
代表接收第10个参数。
示例
ping06.sh
ping -c1 $1 &>/dev/null
if [ $? -eq "0" ]
then
echo "$1 is up"
else
echo "$1 is down"
fi
$1
表示脚本传递的第一个参数
预定义变量
预定义变量在Shell中可以直接使用,位置变量也是预定义变量的一种。预定义变量如表
变量 | 解释 |
---|---|
$0 | 脚本名 |
$* | 所有的参数 |
$@ | 所有的参数 |
$# | 参数的个数 |
$$ | 当前进程的PID |
$! | 上一个后台进程的PID |
$? | 上一个命令的返回值 0表示成功 |
示例
test.sh
echo "第1个参数是\\$1=$1"
echo "第1个参数是\\$2=$2"
echo "第1个参数是\\$4=$4"
echo "所有参数是\\$*=$*"
echo "所有参数是\\$@=$@"
echo "参数的个数是\\$#=$#"
echo "当前进程的PID是\\$$=$$"
读取文本文件脚本示例
ping07.sh
if [ $# -eq 0 ]
then
echo "usage: `basename $0` filename"
return
fi
if [ ! -f $1 ]
then
echo "filename error"
return
fi
for ip in `cat $1`
do
ping -c1 $1 &>/dev/null
if [ $? -eq "0" ]
then
echo "$ip is up"
else
echo "$ip is down"
fi
done
ip.txt
www.baidu.com
www.163.com
www.hao123.com
以上是关于Shell变量的主要内容,如果未能解决你的问题,请参考以下文章