# 定义普通变量 只能由字母、数字、下划线组成,只能以字母或下划线开头
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字符串替换变量值