shell脚本学习(二)[变量,转义,运算符等]
Chapter8 变量的引用
变量的引用
1.1 ${变量名}
称作对变量的引用。
1.2 echo ${变量名}
查看变量的值。
1.3 ${变量名}
在部分情况下可以省略为 $变量名
。
变量的作用范围
变量的默认作用范围
变量的导出,export
举例:
demo_var1="hello subshell"
vim 4.sh
#!/bin/bash
#test echo
echo $demo_var1
chmod u+x 4.sh
#不同运行方式对脚本运行产生的影响
source 4.sh 或 . 4.sh #对当前终端生效
bash 4.sh 或 ./4.sh #变量是空的,没有取到值,因为是使用子进程的方式来运行。
#对子进程进行改变的话,就是使用export,让子进程取到父进程的值,也就是等于 source 或 .
export demo_var1
./4.sh 或 bash 4.sh
变量的删除,unset
unset demo_var1 #删除变量的赋值,当不使用变量时
Chapter9 环境变量、预定义变量与位置变量
系统环境变量
环境变量:每个Shell打开都可以获得到的变量。
set
和env
命令;$?
,$$
,$0
;$PATH
;$PS1
位置变量: $1 $2 ... $n
#查看当前命令的搜索路径
echo $PATH
vim 5.sh
#!/bin/bash
#demo
echo "hello bash"
du -sh
chmod u+x 5.sh
#在当前路径下直接运行
./5.sh
#在其他任意路径都可运行,首先进行目录替换
PATH=$PATH:/root
echo $PATH #再查看目录,确定有目录
5.sh #在任意目录都可直接执行,但在另一个终端就不可以
预定义变量:$?
,$$
,$0
#上一条命令是否正确执行
echo $? #返回值为0则正确执行
#显示当前进程的PID,从而检测脚本运行状态
echo $$
#当前进程的名称
echo $0
vim 6.sh
#!/bin/bash
#PID Pname
echo $$
echo $0
chmod u+x 6.sh
vim 7.sh
#!/bin/bash
# $1 $2 ... $9 ${10} 这里要用大括号将10括起来,不然会读成$1
pos1=$1
pos2=$2
echo $pos1
echo $pos2
chmod u+x 7.sh
#pos1即为-a,pos2即为-l。
./7.sh -a -l
Chapter 10 环境变量配置文件
环境变量配置文件
配置文件/etc/profile
,/etc/profile.d/
,~/.bash_profile
,~/.bashrc
,/etc/bashrc
。
~
是家目录下,etc目录下是所有的环境变量,是给所有用户使用的。
添加环境变量:export PATH=$PATH:/new/path
使用export是保证自己的进程和子进程都能够使用。
添加完环境变量后使用source进行生效。source /etc/bashrc
.
Chapter11 数组
定义数组
IPTS=( 10.0.0.1 10.0.0.2 10.0.0.3)
定义数组时可以加空格,并且在每个元素前面都加空格。
显示数组的所有元素
echo ${IPTS[@]}
显示数组元素个数
echo ${#IPTS[@]}
显示数组的第一个元素,0表示第一个元素。
echo ${IPTS[0]}
举例:
IPTS=( 10.0.0.1 10.0.0.2 10.0.0.3)
echo $IPTS #只会显示第一个元素
echo ${IPTS[@]} #显示数组所有元素,大括号和引用名称不允许有空格。
echo ${#IPTS[@]} #通过加井号来统计数组有多少元素。
echo ${IPTS[0]} #显示数组的第一个元素,0表示第一个元素,为往后使用循环以此读取数组内的元素做铺垫。
Chapter12 转义和引用
特殊字符:一个字符不仅有字面意义,还有元意(meta-meaning)
# 注释
,
;分号
连接两条命令。
\转义符号
单个字符前的转义符号:\n \r \t
单个字母的转义,\$ \" \\
单个非字母的转义。要想打印出''或$,就用转义,如\"
。
""引号
常用引用符号
""双引号
对变量不完全引用,会显示值。
''单引号
对变量完全引用,显示内容。
举例:
#单双引号在变量上的区别
var1=123
echo `$var1` #结果为 $var1
echo "$var1" #结果为 123
" ` "反引号。
Chapter13 运算符
1.赋值运算符
=
赋值运算符,用于算数赋值和字符串赋值。
使用unset取消为变量的赋值。
=
除了作为赋值运算符还可以作为测试运算符。
2.算数运算符
2.1 基本运算符 + - * / ** %
2.2 使用expr进行运算 expr 4+5
,expr只支持整数,不支持浮点数(小数)。
3.数字常量
let "let变量名=变量值"
变量值使用0开头为八进制
变量值使用0x开头为十六进制
4.双圆括号
双圆括号是let命令的简化,一般用这个。
((a=10))
,
((a++))
执行一次,这个值就加1
echo $((10+20))
举例:
#使用expr做计算,直接输出值
expr 4 + 5 #数字和符号之间有空格,只支持整数,不支持非整数,结果为9
num1='expr 4 + 5'
echo $num1 #结果为9
((a=4+5))
echo $a #结果为9
b=4+5
echo $b #结果为4+5,因为单独使用并赋值时,会被当成字符串,而不会计算值。
(( a++ )) #结果为10,++在循环中使用,保证每次都加1;也可以用--,每次都减1