Shell 变量
1、定义变量时,变量名不加美元($)符号
your_name="runoob.com"
2、在变量名前面加美元符号使用已定义过的变量
echo ${your_name}
3、unset删除变量
4、单引号与双引号的区别:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字符串中不能出现单引号
- 双引号字符串中可以有变量
- 双引号里可以出现转义字符
5、用于处理参数的特殊字符
- $# 传递到脚本的参数个数
- $* $@ 显示所有向脚本传递的参数
- $$ 脚本运行的当前进程ID
- $! 后台运行的最后一个进程的ID
- $- 显示Shell使用的当前选项
- $? 显示最后命令的退出状态
6、Shell数组
(1)数组名=(值1 值2 ... 值n)
(2)获取数组元素的个数
${#array_name[*]}
#或者
${#array_name[@]}
(3)获取数组单个元素的长度
${#array_name[n]}
7、 字符串截取
#假设变量var=http://www.aaa.com/123.htm
##号截取,删除左边字符,保留右边字符
echo ${var#*//}
#删除:http://
###号截取,删除左边字符,保留右边字符
echo ${var##*/}
#删除http://www.aaa.com/
#%号截取,删除右边字符,保留左边字符
echo ${var%/*}
#删除/123.htm
#%%号截取,删除右边字符,保留左边字符
echo ${var%%/*}
#删除//www.aaa.com/123.htm
#输出左边第几个字符开始,及字符的个数
echo ${var:0:5}
#0表示左边第一个字符开始,5表示字符的总个数
#结果是:http:
#从左边第几个字符开始,一直到结束
echo ${var:7}
#其中的 7 表示左边第8个字符开始,一直到结束
#结果是 :www.aaa.com/123.htm
#从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
#其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数
#结果是:123
#从右边第几个字符开始,一直到结束
echo ${var:0-7}
#表示从右边第七个字符开始,一直到结束。
#结果是:123.htm
8、关系运算符
- -eq 检测两个数是否相等
- -ne 检测两个数是否不等
- -gt 检测左边的数是否大于右边的
- -lt 检测左边的数是否小于右边的
- -ge 检测左边的数是否大于等于右边的
- -le 检测左边的数是否小于等于右边的
9、布尔运算符
- ! 非运算
- -o || 或运算
- -a && 与运算
10、字符串运算符
- = 检测两个字符串是否相等
- != 检测两个字符串是否不等
- -z 检测字符串长度是否为0
- -n 检测字符串长度是否不为0
- str 检测字符串是否为空
11、文件测试运算符
- -b file 检测文件是否是块设备文件
- -c file 检测文件是否是字符设备文件
- -d file 检测文件是否是目录
- -f file 检测文件是否是普通文件
- -g file 检测文件是否设置了SGID位
- -k file 检测文件是否设置了粘着位
- -p file 检测文件是否有管道
- -u file 检测文件是否设置了SUID位
- -r file 检测文件是否可读
- -w file 检测文件是否可写
- -x file 检测文件是否可执行
- -s file 检测文件是否为空
- -e file 检测文件(包括目录)是否存在
12、Shell test命令
13、Shell流程控制
(1)if else
if condition1
then
#command1
elif condition2
then
#command2
else
#commandN
fi
(2)for循环
for var in item1 item2 ... itemN
do
#command
done
(3)while语句
while condition
do
#command
done
(4)until循环
until condition
do
#command
done
(5)case
case 值 in
模式1)
#command1
;;
模式2)
#command2
;;
esac
14、Shell函数
function name(parameter) {
#statements
}
15、包含外部脚本
. filename
#或
source filename