1.shell变量
1.1局部变量 : 只在语句块中起作用
1.2环境变量 :系统环境env,供系统正常运行的一些变量
1.3shell变量 :
位置变量:$1-$9 分别表示第一个到第九个位置的变量
$0 :当前进程的脚本名
$! : 后台运行的最后一个进程的PID
$? :上一条命令的返回值
$* : 代表所有参数内容
$$ : 当前进程的PID
$# : 表示参数个数
$@ : 代表所有参数内容
2.shell数据类型
2.1shell默认将所有的字符解析成字符串,没有引号、单引号或者双引号都是字符串
单引号:不会解析变量,是什么就输出什么
双引号:会解析变量
2.2 数值计算可以用bc(相当于计算器)
成功返回1,不成功返回0
3.整数数值的运算
第一种: $(( )) 常用于整数的算数运算
第二种: $[[ ]] 适用于字符串之间的运算
第三种: expr表达式
[ ] 和 [[ ]] 的区别:[ ] 会进行解析字符串,会把含有空格的字符串解析成两个字符串,可能会导致变量个数有误的报错,[[ ]] 不会进行变量解析
4.字符串的截取
${line:0:4} :截取line的前四个字符
${line:0-9} :截取line的后9个字符
${line##*:} :从左向右截取最后一个:后面的字符
${line#*:} :从左向右截取第一个:后的字符
${line%%:*} :从右向左截取最后一个:后的字符
${line%:*} :从右向左截取第一个:后的字符
${#line} :输出line的长度
${line[@]} :输出line的每一个字符
5.数组
定义:使用圆括号定义数组,中间以空格作为分割
6.for循环
6.1
for 变量 in 值1 值2...
do
循环语句
done
6.2类似c语言的写法
for (( i=0;i<5;i++))
do
循环语句
done
7.while循环
while
do
循环语句
done
8.if条件判断
if [[ 条件 ]] ;then
执行语句
elis [[ 条件判断 ]];then
执行语句
else
执行语句
fi
9.shell常见命令
9.1 seq命令
seq [option] start step end :产生从start到end的步长为step的一串数据
[option] -w, --equal-width
equalize width by padding with leading zeroes 用0填充使他们等宽
9.2常用判断
[ -d xx ] :判断是不是目录
[ -f xx ] :判断是不是文件
[ -z xx ] :判断xx长度是否为0
[ -n xx] :判断xx长度是否非零
[ ! xx ] :取逻辑非
[ xx -a xx ] :如果xx 和xx 都为真,表达式为真
[ xx -o xx ] :如果xx和xx有一个为真,表达式为真
字符串大小的判断都是根据字典序来排的
逻辑判断:只能用于整数判断
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
[ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2返回为真,<=
10.判断服务是否启动的方法(通过PID来判断)
ps -ef :查看当前进程
ps -aux :查看当前进程
11.shell脚本文本处理命令
sed : 修改文本内容
awk :文本截取
-F :指定分隔符
$0 :输出所在行
先拿到/etc/passwd文件,通过awk,指定用:号截取成一个个的字段,然后匹配第一个字段中,有包含sc这个字符的,然后将整行输出出来
grep :文本过滤
将包含sc8的行输出
sort :排序
将他们以第四个字段为标准倒序排列出来
uniq :去重命令
-c :统计一下每个字符出现了多少次
要先排序再进行去重,因为uniq命令只会给邻居去重,先进行排队才能将所有的字符去重
head : 从开头开始截取文件
默认截取文件强势行
-n :指定截取行数
tail : 从末尾开始截取文件
默认截取文件后十行
-n :指定截取行数
11 cut命令
cut :从文本文件或者文本流中间提取文本列
cut -选项 提取范围 文本文件
常见选项:
-c :提取字符
-f :提取字段
-d :指定分隔符,默认分隔符为tab键
提取范围:
n :第n项
n- :第n项到末尾项
-n :行首到第n项
n-m :从n到m项
n,m :第n项到第m项
12 tr命令
tr -s “ ” :将所有连续的空格的压缩成一个
cut 文件时,将每一个空格都会识别成一个字符,所以截取时非常麻烦,现在我们用ts命令将文本中的空格都压缩成一个空格,我们就能很方便的截取字段