shell脚本简单整理

背景

起因是前几天跟WDK定位的一个bug,花了挺长时间,记录一下。
这个问题的定位过程需要查看许多信息,但是信息比较杂乱,且有多个时间段需要查看,在收集这些信息的时候就发现了许多重复工作,每次手动操作一遍需要消耗较多时间,很不划算。
萌生编写脚本,将重复工作交给代码的想法,开始编写shell脚本,却有种提笔忘字的感觉,写的很不熟练,最终虽然写出来了效果也不是很理想,差强人意。
这里整理一下常用的指令,方便后续查阅。

脚本语法

1、shell 脚本拓展名为.sh。shell 脚本第一行一定要为:

#!/bin/bash

2、等号两边不能直接接空格符,若变量中本身就包含了空格,则整个字符串都要用双引号、或单引号括起来

3、双引号:可以解析变量的值,单引号:不能解析变量的值

num=200
echo "$num" # 	$num 当成变量处理
echo '$num' # $num  当成字符串

1.数值计算

shell 仅支持整型,数值计算使用$((表达式)),示例

#!/bin/bash
read -p "please input operand and number: " operand number
echo "$operand + $number = $(($operand+$number))"
echo "$operand - $number = $(($operand - $number))"
echo "$operand * $number = $(($operand * $number))"
divided=$(($operand/$number))		#赋值号间不能有空格!
echo "$operand / $number = $divided"

执行结果

2.test命令

test命令用于查看文件是否存在、权限等信息,可以进行数值、字符和文件三方面的测试。

cmd1 && cmd2
#当 cmd1 执行完毕且正确,那么 cmd2 执行,当 cmd1 执行完毕且错误,那么 cmd2 不执行

cmd1 || cmd2
#当 cmd1 执行完毕且正确,那么 cmd2 不执行,当 cmd1 执行完毕且错误,那么 cmd2 执行
#文件存在测试
#!/bin/bash
read -p "please input file name: " filename
test -e $filename && echo "$filename exist" || echo "$filename non-existence"
# test -e :如果文件存在则为真

在这里插入图片描述
测试字符串是否相等

#!/bin/bash
read -p "please input first string: " firstStr
read -p "please input second string: " secondStr
test $firstStr = $secondStr && echo "The two strings are the same" || echo "The two strings are not the same"
# test str1 = str2 :两个字符串相等则为真

在这里插入图片描述

3.中括号判断符

#!/bin/bash
read -p "please input first string: " firstStr
read -p "please input second string: " secondStr
[ "$firstStr" == "$secondStr" ] && echo "The two strings are the same" || echo "The two strings are not the same"
# 中括号两端内测要加空格,内容建议加 "",否则有空格时会出现参数过多
[ "$firstStr" != "$secondStr" ] && echo "The two strings are not the same" || echo "The two strings are the same"
[ "$firstStr" = "$secondStr" ] && echo "The two strings are the same" || echo "The two strings are not the same"
echo firstStr:  $firstStr
echo secondStr: $secondStr

在这里插入图片描述

参数 / 预设变量

shell直接提供无需定义的变量
$0 ~ $n,表示 shell 脚本的执行参数,包括 shell 脚本执行命令本身,shell 脚本执行命令本身为$0。
$#表示最后一个参数的标号。
$@表示除$0外的所有参数。

在这里插入图片描述

条件判断

if 条件判断; then
	# 条件判断后成立要执行的语句
elif 条件判断;then		# 此语句可多次添加
	# 条件判断后成立要执行的语句
else
	# 条件判断后不成立要执行的语句
fi

函数

function fname(){		# function 可写可不写
	# 函数代码段
}

fname		# 函数调用

fname param1 param2		# 函数传参

变量的拓展

1.判断变量是否存在
在这里插入图片描述在这里插入图片描述
2.字符串操作
在这里插入图片描述

数值比较语句

数值比较的格式如下:

test num1 num_op num2

# 示例
test $data1 -eq $data2
echo "相等:$?"

其中num_op可以是下表中的一个
在这里插入图片描述

输入/输出重定向

一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。

重定向命令列表如下:
在这里插入图片描述
输出重定向:

# 这个命令执行command1然后将输出的内容存入file1
command1 > file1

输入重定向
和输出重定向一样,Unix 命令也可以从文件获取输入,语法为:

# 本来需要从键盘获取输入的命令会转移到文件读取内容。
ommand1 < file1

参考文档:
https://zhuanlan.zhihu.com/p/684371371
https://blog.csdn.net/zhuguanlin121/article/details/119245255
https://cloud.tencent.com/developer/article/2179861

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值