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变量的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程入门

代码片段:Shell脚本实现重复执行和多进程

玩转Bash变量

玩转Bash变量

2.5.2 变量

如何创建片段以重复变量编号中的代码行