Shell编程补充
- shell的变量
- 定义变量的单双引号的不同
- 输出变量
- 父子shell
- shell子串
- BASH
- shell子串的用法
- shell
- 统计变量长度
- 输出程序运行时间
- 结论:
- shell扩展变量
- 用于处理变量值的
- 创建子shell(进程列表)
- 查看是否开启子shell在运行
- 内置命令,外置命令
- shell编程总结
shell的变量
定义变量的单双引号的不同
(1)单引号: 不能识别特殊符号
(2双引号: 能识别特殊符号
输出变量
父子shell
环境变量(全局)可以在父shell里写,子shell里面执行
每次用bash去执行shell文件时,会开启子shell,不会影响当前环境的变量
每次用source去执行shell文件时,就不开启子shell,会影响当前环境的变量
shell子串
BASH
- history命令:
-c 表示清除历史
-r 表示恢复历史
- !历史id
表示快速执行这个代码
3 . !!
表示执行上一次命令
4 . 内置命令
(1)echo
-n 不换行输出
不同用户输出的效果不一样
\n 换行
\b 退格
(2)printf
(3)eval
用于执行多个命令
不要也行
(4)exec
执行命令之后,自动退出当前shell环境(退出用户)
shell子串的用法
shell
1.$#
变量 , 用于输出变量长度
2.${变量:n} 从数字后面输出
3 . ${变量:n:长度} 用于截取字符串
4 . 删除
是*前面必须是刚开头的那个数字或字母
${变量#xxx} 从前向后 , 删变量里面最短的那个xxx
${变量##xxx} 从前向后 , 删变量里面最长的那个xxx
是*后面必须是结尾的那个数字或字母
${变量%xxx} 从后向前 , 删变量里面的那个xxx
${变量%%xxx} 从后向前 , 删变量里面的那个xxx
5 . 替换字符串
${变量/旧/新} 用于替换第一个遇到的
${变量//旧/新} 用于替换所有遇到的
统计变量长度
1 . cat 2.sh | wc -L
2 . expr 用于数值计算
3 . echo $#变量 最好
输出程序运行时间
用$#变量 , 来返回长度 (结果它快一点)
#!/bin/bash
for n in {1..4000}
do
char=`seq -s "*" 5`
echo $#char &>/dev/null
done
用 expr length 来返回长度
#!/bin/bash
for n in {1..4000}
do
char=`seq -s "*" 5`
echo expr length "$char" &>/dev/null
done
结论:
一般就用内置的函数,命令,速度是最快的
shell扩展变量
用于处理变量值的
基本上用于变量为空
1.${变量:-word}
没值返回word,有值返回值
变量为空就返回word , 不空就正常返回
2.${变量:=word}
没值返回word,有值返回值
变量为空就赋值,不空就输出原来的值
3.${变量:?word}
没值返回word,有值返回值
用于提示变量是不是为空
4.${变量:+word}
没值不返回,有值返回word
创建子shell(进程列表)
把命令写在括号里
查看是否开启子shell在运行
echo $BASH_ SUBSHELL 返回0就是没有开启
加一个()就是进入一个子shell , 用于提高程序并发执行
(ll;echo $BASH_ SUBSHELL) 返回1
(ll;(pwd;echo $BASH_ SUBSHELL)) 返回2
(ll;(pwd;(echo $BASH_ SUBSHELL))) 返回3
内置命令,外置命令
用type看是外还是内
外置 : 慢 , 一定会开启子shell
内置 : 系统启动就执行了 , 用compgen -b (或enable)查看哪些是内置的
shell编程总结
1 . {}用于返回变量 , ()和``用于运行命令 ,
echo ${date} 不返回值
echo $(date) 返回时间