1.shell脚本中可使用的变量
系统环境变量
无需再脚本中定义,可直接使用 ${变量名} 引用该变量
用户变量
脚本中定义的变量,包括字符串变量和数值变量
2. 变量命名遵守的规则
变量名首个字符不能以数字开头
变量名不能与系统命令或变量或关键字冲突
变量名中不能包含空格,可以包含下划线(_)
变量名区分大小写
3.变量定义
3.1 直接定义变量
var=value
var='value'
var="value"
若value中不含空格键或者tab键,三种方式都可以使用
否则,使用第二,三种方式
其中:
单引号:强引用,value是什么就会输出什么
双引号:弱引用,value可以引用其他变量
3.2 命令结果定义变量
var=`command`
var=$(command)
命令执行的结果作为变量,``为反引号字符,位置在键盘数字1的左边的英文字符
3.3 read命令定义变量
read -p "提示用户输入的描述" var
该方法会把用户输入的内容作为变量
read选项;
-a:后接数组变量,将用户输入有内容储存到数组中(输入的内容用空格隔开)
-p:给出用户提示
-n:定义变量长度,后跟正整数
-t:超时时间,用户在时间内未输入,则退出并返回错误
-r:禁用\的转义功能,有改选项,"\"表示正常的字符
-s:静默模式,输入的内容不会回显在屏幕上,常用于输入密码
4.变量使用
${var}
引用变量时外面的花括号是可选的,加花括号是用于声明变量的边界,最好加上
5.变量的截取替换
用法
${#var} 返回变量长度
${var/string/newstring} 返回第一个string被替换成newstring的结果
${var//string/newstring} 返回所有string被替换成newstring的结果
${var:start_index} 返回从索引start_index(即第start_index+1个字符)开始截取一直到末尾的结果
${var:start_index:length} 返回从索引start_index开始截取的长度为length的结果
${var:0-m} 返回从右边第m个字符开始一直到结束的结果
${var:0-m:length} 返回从右边第m个字符开始的长度为lenght的结果
${var#*string} 删除从左边开始的第一个string和左边所有字符,保留右边
${var##*string} 删除从左边开始的最后string和左边所有字符,保留右边
${var%string*} 删除从右边开始的第一个string和右边所有字符,保留左边
${var%%string*} 删除从右边开始的最后一个string和右边所有字符,保留左边
${var:-word} 若变量var未赋值或为null,则返回结果word
${var:=word} 若变量var未赋值或为null,则返回结果word,并且var=word
${var:?word} 若变量var未赋值或为null,则输出错误信息,否则返回结果${var}
${var:+word} 若变量var已赋值或不为null,则返回结果word
示例
var=''
echo ${#var}
结果:50
echo ${var/w/test}
结果:https://testww.cnblogs.com/gudanaimei/p/12218994.html
echo ${var//w/test}
结果:https://testtesttest.cnblogs.com/gudanaimei/p/12218994.html
echo ${var:3}
结果:ps://www.cnblogs.com/gudanaimei/p/12218994.html
echo ${var:3:10}
结果:ps://www.c
echo ${var:0-15}
结果;p/12218994.html
echo ${var:0-15:6}
结果:p/1221
echo ${var#*o}
结果:gs.com/gudanaimei/p/12218994.html
echo ${var##*o}
结果:m/gudanaimei/p/12218994.html
echo ${var%o*}
结果:https://www.cnblogs.c
echo ${var%%o*}
结果:https://www.cnbl
6.常见位置变量
$$ 返回程序的PID
$0 脚本本身
$1 脚本运行时接的第一个参数
$2 脚本运行时接的第二个参数
$3 脚本运行时接的第三个参数
$*=$@ 脚本运行时接的所有参数
$# 脚本运行时后面接的参数的个数
$? 上一条命令执行成功则返回0,失败则返回非0
7.数值变量的运算
7.1 运算符
+ 加法
- 减法
* 乘法
/ 除法
** 次方运算(bc不能使用)
% 取余
7.2 整数运算
(())、let、expr、$[]
a=1
b=3
c=$((${a}+${b}))
let c=a+b
c=$(expr ${a} + ${b})
c=$[${a}+${b}]
7.3浮点数运算
a=2.5
b=3.5
c=$(echo ${a}+${b}|bc)