网站的建设维护,根据颜色找网站,wordpress 主题 响应式,北京王府井简介shell大全读取文件每一行内容文件是否存在数组定义和循环取值变量循环流程控制语句#xff1a;case判断数值相等/大于/小于判断字符串相等awk求和、平均、最大、最小sed用法exprbc计算器读取文件每一行内容
while read line
doecho $line
done a.txt文件是否存在
if [ …
shell大全读取文件每一行内容文件是否存在数组定义和循环取值变量循环流程控制语句case判断数值相等/大于/小于判断字符串相等awk求和、平均、最大、最小sed用法exprbc计算器读取文件每一行内容
while read line
doecho $line
done a.txt文件是否存在
if [ ! -d /data/ ];thenmkdir /data
elseecho 文件夹已经存在
fi说明
-e 判断对象是否存在
-d 判断对象是否存在并且为目录
-f 判断对象是否存在并且为常规文件
-L 判断对象是否存在并且为符号链接
-h 判断对象是否存在并且为软链接
-s 判断对象是否存在并且长度不为0
-r 判断对象是否存在并且可读
-w 判断对象是否存在并且可写
-x 判断对象是否存在并且可执行
-O 判断对象是否存在并且属于当前用户
-G 判断对象是否存在并且属于当前用户组
-nt 判断file1是否比file2新 [ /data/file1 -nt /data/file2 ]
-ot 判断file1是否比file2旧 [ /data/file1 -ot /data/file2 ]数组定义和循环取值
arr(a b c)echo ${arr[0]} #获取第一个元素的值
echo ${arr[-1]} #获取最后一个元素的值
# 获取所有元素的值
echo ${arr[*]}
echo ${arr[]}
# 统计数组的长度
echo ${#arr[*]}
# 打印数组的下标值
echo ${!arr[]}# 循环 方式一 直接取值
for i in ${arr[]}
doecho $i
done
# 循环 方式二 下标取值
for i in ${!arr[]}
doecho ${arr[i]}
done
# 循环 方式三
for((i0;i${#arr[]};i))
doecho ${arra[i]}
done变量循环
for i in $(seq 1 $1)
doecho $i
donefor (( i 1; i $line; i ))
doecho $i
done流程控制语句case case $1 instart)op start $2;;stop)op stop $2;;status)op status $2;;*)echo Usage: service $2 start|stop|status;;esac判断数值相等/大于/小于
# 整数比较
-eq 等于,如:if [$a -eq $b ]
-ne 不等于,如:if [$a -ne $b ]
-gt 大于,如:if [$a -gt $b ]
-ge 大于等于,如:if [$a -ge $b ]
-lt 小于,如:if [$a -lt $b ]
-le 小于等于,如:if [$a -le $b ]小于(需要双括号),如:(($a $b))小于等于(需要双括号),如:(($a $b))大于(需要双括号),如:(($a $b))大于等于(需要双括号),如:(($a $b))判断字符串相等
if [ $testx testx ]; then# 等于,如:if [ $a $b ]# 等于,如:if [ $a $b ],与 等价这里的关键有几点
使用单个等号注意到等号两边各有一个空格这是unix shell的要求注意到$testx最后的x这是特意安排的因为当$test为空的时候上面的表达式就变成了x testx显然是不相等的。而如果没有这个x表达式就会报错[: : unary operator expected
awk求和、平均、最大、最小
# 科学计数法打印
bin/hdfs dfs -du /warehouse/hive/ | awk {sum$1} END {print Sum , sum/1024/1024}# 非科学计数法打印
bin/hdfs dfs -du /warehouse/hive/ | awk {sum$1} END {printf(%d\n, sum/1024/1024)}1、求和
awk {sum$1} END {print Sum , sum} number.txt2、求平均
awk {sum$1} END {print Average , sum/NR} number.txt3、求最大值
awk BEGIN {max 0} {if ($0 max0) max$1} END {print Max,max} number.txt4、求最小值min的初始值设置一个超大数即可
awk BEGIN {min 1999999} {if ($1min) min$1 fi} END {print Min, min} number.txt5. 输出排序最大值所在行内容如下以第一列排序cat num.txt
858 mail
1858 nginx
8502 tomcat
1145 zabbix
3457 mongodb
1356 redis
974 Mysql记录最大值的时候同时记录一下当前行后面输出这个变量即可 此处的的content可随意定义awk BEGIN {max 0} {if ($10 max0) {max$1 ;content$0} } END {print content} num.txtsed用法
# 取 1到3 行的内容 重定向到 b.txt
sed -n 1,3p a.txt b.txt# 替换
sed -i s/abc/def/g ./a.txt如果我们使用sed命令时如果出现特殊字符可能会报错示例如下
# /不可以作为界定符因为会与里面的内容冲突
sed -i s/flink//etc/g # 井号#不可以作为界定符因为会与里面的内容冲突
sed -i s#jdbc://127.0.0.1password1#aa$usernameroot#g # 不可以作为界定符因为会与里面的内容冲突
sed -i sjdbc://127.0.0.1password1aa$usernamerootg那该如何解决呢
我们得看来里面的内容来选择特定的界定符例如
里面含有/可以选择“#”或“ ”作为界定符 里面含有“#”可以选择“”或“/”作为界定符 里面含有“”可以选择“/”或“#”作为界定符。 那么如果都有以上的内容呢只能在被替换文本中使用转义符号 “\”了如
sed -i s/oracle/\/etc\/oracle/g
expr
expr支持普通的算术操作算式表达式优先级低于字符串表达式高于逻辑关系表达式。 - 加减运算。两端参数会转换为整数如果转换失败则报错* / % 乘除取模运算。两端参数会转换整数如果转换失败则报错() 可以用来表示优先级但需要用反斜杠转义。
a3
b4echo expr $a $b #输出7
echo expr $a - $b #输出-1
echo expr $a \* $b #输出12*需要转义
echo expr $a / $b #输出0整除
echo expr $a % $b #输出3
echo expr \($a 1\)\*\($b1\) #输出20值为(a1)*(b1)bc计算器
echo 6.5/2.7 | bc
2echo scale5;6.5/2.7 | bc #其中scale是控制小数点位数
2.40740echo 53 | bc
8echo (26)*3 | bc
24#关系运算符
||, , !, ,
#基本数学运算- *, /, %, ^,
#自增自减--
#逻辑运算符
, , , , !length() #用于求表达式的结果长度
length(300)
3scale() #用于获取表达式小数点后位数
scale(3.14)
2sqrt() #求平方根
scale6;sqrt(21)
4.582575#如果使用了bc -l可以将预置的数学运算导入
s(x) #sin函数,x为弧度
s(3.14)
.00159265291648695254c(x) #cos函数
c(0)
1.00000000000000000000a(x) #arctang函数
a(sqrt(2)/2)
0.61547970867038734106l(x) #自然对数
l(10)
2.30258509299404568401e(x) #自然数为底的指数函数
e(2)
7.38905609893065022723j(n,x) #Basel函数n阶
j(1,3)
0.33905895852593645892