shell 变量

作者: ropon 分类: Shell 发布时间: 2019-02-26 17:21
# 定义普通变量 只能由字母、数字、下划线组成,只能以字母或下划线开头
web_path=/home/wwwroot
web_path='/home/wwwroot'
web_path="/home/wwwroot"
web_path=$(pwd) # 命令执行结果赋给变量

# awk输出
 								web_tpye=123		web_tpye='ropon'		web_tpye="ropon"		web_tpye=`pwd`
awk 'BEGIN {print "$test"}' 	   $web_tpye 			$web_tpye				$web_tpye			   $web_tpye
awk 'BEGIN {print $test}' 	   																				
awk 'BEGIN {print '$test'}' 	   123 																    语法报错
awk 'BEGIN {print "'$test'"}' 	   123 					ropon					ropon			   		ropon

# 特殊位置参数变量
# $0 获取当前执行shell脚本的文件名,如果执行脚本包含路径,那么就包含路径
# $n 获取当前执行shell脚本的第n个参数值,n=1...9 当n为0时表示脚本的文件名 n大于9 用${10...}表示
# $# 获取当前执行shell脚本接收参数的总个数
# $* 获取当前执行shell脚本所有参数,不加引号和$@相同 如果"$*" 表示将所有参数视为一个字符串 相当于"$1$2$3"
# $@ 获取当前执行shell脚本所有参数,不加引号和$*相同 如果"$@" 表示将所有参数视为不同字符串 相当于"$1""$2""$3"

# dirname 获取脚本的路径
dirname /root/studyshell.sh 
# basename 获取脚本名字
basename /root/studyshell.sh

set -- 清除所有参数变量

set -- "My name" is Ropon
echo $#
echo $1
echo $2
echo $3

echo $*
echo $@

echo "$*"
echo "$@"

for i in $*; do echo $i; done
for i in $@; do echo $i; done

for i in "$*"; do echo $i; done
for i in "$@"; do echo $i; done 等价于 for i; do echo $i; done

$? 获取上一条指令执行状态返回值(0为成功,非零为失败)
$$ 获取当前执行shell脚本的进程号
$! 获取上一个在后台工作的进程的进程号
$_ 获取在此之前执行的命令或脚本的最后一个参数

sed -n '2,4p' studyshell.sh #查看studyshell.sh 第2到4行代码

echo -n 不换行输出内容
	 -e 解析转义字符
	 	\n 换行
	 	\r 回车
	 	\t tab
	 	\b 退格
	 	\v 纵向tab

eval #语法 eval args
	eval "echo \$$#"

exec #语法 eval 命令参数 不创建子进程前提下,去执行指定命令,执行完成后该进程就终止

read

shift #使用shift语句使用所有位置参数依次想左移动一个位置 $#值也会自动减1直到0为止
	echo $1 $2
	[ $# -eq 2 ] && shift && echo $1

exit

shell变量子串
	${ropon}					#返回$ropon的内容
	${#ropon}					#返回$ropon内容的长度(按字符)也适用于特殊变量
	${ropon:offset}				#返回在变量$ropon中,从位置offset之后开始提取子串到结尾
	${ropon:offset:length}		#返回在变量$ropon中,从位置offset之后开始提取长度为length的子串
	${ropon#word}				#返回在变量$ropon开头删除首次匹配word剩余的子串
	${ropon##word}				#返回在变量$ropon开头删除匹配word多次剩余的子串
	${ropon%word}				#返回在变量$ropon结尾删除首次匹配word剩余的子串
	${ropon%%word}				#返回在变量$ropon结尾删除匹配word多次剩余的子串
	${ropon/pattern/string} 	#返回使用string代替第一个匹配的pattern(贪婪模式匹配)
	${ropon//pattern/string} 	#返回使用string代替第所有匹配的pattern

ropon="abcABC123abcABCcaba"
echo ${ropon#a*C}		#123abcABCcaba
echo ${ropon##a*C}		#caba
echo ${ropon%c*a}		#abcABC123abcABC
echo ${ropon%%c*a}		#ab
echo ${ropon/abc/11} 	#11ABC123abcABCcaba
echo ${ropon//abc/11} 	#11ABC12311ABCcaba

shell特殊扩展变量
	${ropon:-word}		#如果ropon变量值为空或未定义,则返回word字符串
	${ropon:=word}		
	#如果ropon变量值为空或未定义,则返回word字符串,但位置变量和特殊变量不适用,与${ropon:-word}用法相同,只不过将word赋给ropon
	${ropon:?word}		#如果ropon变量值为空或未定义,则word字符串作为标准错误输出,否则输出该变量的值
	${ropon:+word}		#如果ropon变量值为空或未定义,则什么都不做,否则wordp字符串替换变量值

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!