【运维】运维常用命令
创始人
2025-05-30 09:15:42

shell大全

  • 读取文件每一行内容
  • 文件是否存在
  • 数组定义和循环取值
  • 变量循环
  • 流程控制语句:case
  • 判断数值相等/大于/小于
  • 判断字符串相等
  • awk求和、平均、最大、最小
  • sed用法
  • expr
  • bc计算器

读取文件每一行内容

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((i=0;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 in"start")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 [ "$test"x = "test"x ]; then# = 等于,如:if [ "$a" = "$b" ]# == 等于,如:if [ "$a" == "$b" ],与 = 等价

这里的关键有几点:

  • 使用单个等号
  • 注意到等号两边各有一个空格:这是unix shell的要求
  • 注意到"$test"x最后的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 > max+0) max=$1} END {print "Max=",max}' number.txt4、求最小值(min的初始值设置一个超大数即可)
awk 'BEGIN {min = 1999999} {if ($1 max+0) {max=$1 ;content=$0} } END {print content}' num.txt

sed用法

# 取 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.1&password=1#aa$username=root#g' # @不可以作为界定符,因为会与里面的内容冲突
sed -i 's@jdbc://127.0.0.1&password=1@aa$username=root@g'

那该如何解决呢?

我们得看来里面的内容来选择特定的界定符,例如:

里面含有"/",可以选择“#”或“ @”作为界定符;
里面含有“#”,可以选择“@”或“/”作为界定符;
里面含有“@”,可以选择“/”或“#”作为界定符。
那么如果都有以上的内容呢?只能在被替换文本中使用转义符号 “\”了,如:

sed -i 's/oracle/\/etc\/oracle/g'

expr

expr支持普通的算术操作,算式表达式优先级低于字符串表达式,高于逻辑关系表达式。

  • + - 加减运算。两端参数会转换为整数,如果转换失败则报错;
  • * / % 乘,除,取模运算。两端参数会转换整数,如果转换失败则报错;
  • () 可以用来表示优先级,但需要用反斜杠转义。
a=3
b=4echo `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\)\*\($b+1\)` #输出20,值为(a+1)*(b+1)

bc计算器

echo '6.5/2.7' | bc
2echo 'scale=5;6.5/2.7' | bc    #其中scale是控制小数点位数
2.40740echo "5+3" | bc
8echo "(2+6)*3" | bc
24#关系运算符
||, &&, !, =, ==
#基本数学运算
+, -, *, /, %, ^,
#自增,自减
++, --
#逻辑运算符
<, >, <=, >=, !=length()    #用于求表达式的结果长度
length(300)
3scale()  #用于获取表达式小数点后位数
scale(3.14)
2sqrt()  #求平方根
scale=6;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

相关内容

热门资讯

【分享】基于TPS65140的... 在一次项目定制中,客户要求我们将CPU主控和LCD显示屏电压驱动电路做成一体板...
初识C语言(3) 操作符,关键字(typedef、static),指针
一口一口吃掉yolov8(2) 前面介绍了训练的第一个部分,也是大部分人在网上找得到的文章,但是后面2个...
lol女枪西部牛仔有没有特效,... lol女枪西部牛仔有没有特效目录lol女枪西部牛仔有没有特效烬哪个皮肤手感好?lol女枪西部牛仔有没...
灭鼠神器超声波管用吗,超声波灭... 灭鼠神器超声波管用吗目录灭鼠神器超声波管用吗超声波灭老鼠有效果吗?电子猫超声波驱鼠器电子灭鼠器,管用...
5173交易账号收多少手续费啊... 本篇文章极速百科给大家谈谈5173交易账号收多少手续费啊,以及5173账号交易收费标准对应的知识点,...
父亲节是每年的几月几号呢,父亲... 父亲节是每年的几月几号呢目录父亲节是每年的几月几号呢父亲节母亲节是几月几号 父亲节和母亲节是每年的几...
53-exec进程替换 exec进程替换 一.exec系列 1.execl #include#include#include...
CF1737E Ela Goe... CF1737E Ela Goes Hiking 题目大意 nnn 只蚂蚁站成一排,第 ...
福州一日游哪里好玩,福州一日游... 福州一日游哪里好玩目录福州一日游哪里好玩福州一日游必去景点福州一天游,求推荐去哪福州一日游,有什么好...
新车5到6万买什么车好,预算5... 新车5到6万买什么车好目录新车5到6万买什么车好预算5万,有哪些车款可以推荐?买车5-6万买什么车好...
网络语言JMS是什么意思(jm... 本篇文章极速百科给大家谈谈网络语言JMS是什么意思,以及jms是什么意思中文翻译对应的知识点,希望对...
苹果6id锁怎么强制解除,苹果... 苹果6id锁怎么强制解除目录苹果6id锁怎么强制解除苹果六忘记ID激活锁怎么办如何强制解除id锁的方...
机器人阻抗控制(二) #阻抗控制 #机器人控制 #动力学方程 《Cartesian Impedance Control o...
SkyWalking 日志收集 SkyWalking 日志收集一、需求二、步骤2.1 pom文件引入依赖2.2 logback-sp...
DETR网络模型构建 这篇文章主要为记录DETR模型的构建过程 首先明确DETR模型的搭建顺序:首先是bac...
算法强化每日一题--组队竞赛 大家好 先看看题目 链接:组队竞赛__牛客网 [编程题]组队竞赛 牛牛举办了一次编...
什么是人际交往,什么是人际交往... 什么是人际交往目录什么是人际交往什么是人际交往?影响人际交往的因素有哪些?什么是人际交往人际交往指的...
自考大专什么时候报名,自考大专... 自考大专什么时候报名目录自考大专什么时候报名自考大专怎么报名 报考时间在几月份?每年的什么时候报名自...
蚕的变化过程,蚕的一生经历了哪... 蚕的变化过程目录蚕的变化过程蚕的一生经历了哪几个阶段?咨询:蚕的演变过程?蚕的生长变化顺序是怎样的?...
汽车出现service是什么意... 汽车出现service是什么意思目录汽车出现service是什么意思车上的service是什么意思?...
arcpy基础篇(6)-制图脚... arcpy.mapping模块可以实现地图制图的自动化,它的具体功能包括管理地图文档、...
基于 Zynq 的振动台控制器... 3 振动台控制器架构设计与实现 如前所述,Zynq-7000 本身已经具有了独特的架...
为什么手机收不到验证码短信,为... 为什么收不到短信验证码 3. 曾经向运营商申请过屏蔽短信号码,或添加过黑名单。 4. 短...
中国移动如何免费领取10G流量... 中国移动如何免费领取10G流量目录中国移动如何免费领取10G流量免费领10g流量的软件中国移动送10...
描写孩子童真的句子,孩子童真的... 描写孩子童真的句子目录描写孩子童真的句子孩子童真的唯美句子有哪些?描写童真童趣的一段话,急急!!!描...
QQ空间如何自定义封面,进入q... QQ空间如何自定义封面目录QQ空间如何自定义封面进入qq空间时的封面怎么设置?不花钱的那种怎样制作Q...
55-kill命令及实现kil... kill命令及实现kill命令 一. kill命令简介 在Linux系统中,kill命...
【问题与方法】如何使用vsco... 码字不易,如果各位看官感觉该文章对你有所帮助,麻烦点个关注,...
OMM导致tomcat引用假死 背景 在开发测试环境发现一个奇怪的情况,因查询100w条数据导致OOM,...