1.预定义变量:预定义的特殊变量有着特殊的含义,用户不可以更改,所有的预定义变量都由$符合和另外一个符号组成。常用的预定义特殊变量如下:
$$ 当前进程pid
$? 命令执行后的返回状态 0为正确 非0为执行错
$# 位置参数的数量
$* 所有位置参数的内容
$@ 显示所有的参数
$! 上一个后台进程的pid
2.引用变量: $变量名 或 ${变量名}
3.查看变量: echo $变量名
4.取消变量: unset 变量名,仅在当前shell中有效
5.常用环境变量:USER UID HOME HOSTNAME PWD PS1 PATH
6.#子进程,仅会继承父shell的环境变量,不会继承父shell的自定义变量 #环境变量既是别的语言的全局变量
7.变量运算
变量运算符 + ,- ,* ,/,(), %取余(取模)
运算方式 $(( )) $[ ] expr
注意运算符两边的空格必须写
expr 5 * 3 #需要转义
expr 5 ’ * ’ 3 # 需要加上单引号
8. 浮点运算
bash 本身不能进行小数运算:需要 bc 命令转换
yum install -y bc
echo "2.64" | bc
9.变量引用
echo you now $1250
you now $1250
单引号是强引不进行解析
echo $num个女生
$num个女生
双引号是弱引进行解析
echo $num个女生
10个女生
10.读取用户标准输入
read -p sum #p后面双引号引出的是等同于注释,提醒用户输入 sum 输入的值
read -t # t是指定光标等待几秒
read -s #输入的内容不显示在屏幕上
11.命令替换
a= date +%m%d
#反引号引起来
a= $(data +%m%d) #反引号可以用次来代替
12.变量替换
13.变量替换-匹配截取
a=12345678
echo ${a:5} #从左往右第五位开始截取,留下后三位
678
echo ${a:3:4} #从第3位开始截取,留下后四位的,剩下的都不要。
4567
echo ${a:2:-1} #从左往右第2位开始截取,从右往左截取
34567
echo ${a:2:-2}
3456
14.匹配截取
${变量#关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最短数据切除
${变量##关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最长数据切除
${变量%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据切除
${变量%%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据切除
参数解释:
:表示全部字符。
%:最短尾匹配;
%%:最大尾匹配
%:从右往左
#:从左往右
url=www.sina.com.cn
echo ${url#.} 从前往后匹配到“ . ” 最短匹配
sina.com.cn
echo ${url##.} 从前往后匹配到“.”,最长匹配
cn
echo ${url%.} 从后往前匹配到“.”,最短匹配
www.sina.com
echo ${url%%.} 从后往前匹配到“.”,最长匹配
www
echo ${url#a.} #不加*
www.sina.com.cn
echo ${url#a.} #加
com.cn
15.变量内容的替换
${变量 /旧字符串 /新字符串} 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串替代』
${变量 //旧字符串 /新字符串} 若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串替代』
16.basename & dirname
basename #去除目录后剩下的名字,取文件名
例:
[root@linux-server ~]# temp=/home/temp/1.test
[root@linux-server ~]# base=basename $temp
[root@linux-server ~]# echo $base
dirname #获取目录名
例:
[root@linux-server ~]# temp=/home/temp/1.test
[root@linux-server ~]# dir=dirname $temp
[root@linux-server ~]# echo $dir
17.流程控制
test 能够理解3中类型的表达式
1.文件测试
2.字符串比较
3.数字比较
字符串
-n STRING
the length of STRING is nonzero
-n 字符串的长度 不是零成功。
-z STRING
the length of STRING is zero
-z 字符串长度。是零成功 #对于未定义或赋予空值的变量将是为空串。
#数字
-eq 等于
-ne 不等于
-ge 大于等于
-le 小于等于
-gt 大于
-lt 小于
#文件
-f 存在且是正规文件
-d 存在且是目录
-h 存在且是符号链接
-b 块设备
-c 字符设备
-e 文件或者目录存在
shell笔记1
最新推荐文章于 2022-07-29 09:27:05 发布