本文介绍: 作为程序员我们每天都在与代码工具打交道。其中,Shell是一个非常重要的工具,它可以帮助我们高效地完成各种任务本文将列举一些程序员日常使用Shell提高效率操作,帮助大家更好利用Shell提高工作效率

作为程序员我们每天都在与代码工具打交道。其中,Shell是一个非常重要的工具,它可以帮助我们高效地完成各种任务。本文将列举一些程序员日常使用Shell提高效率操作,帮助大家更好利用Shell提高工作效率

首先,让我们了解一下Shell的执行环境。对于Windows用户可以使用WSL(Windows Subsystem for Linux),它为Windows平台提供了一个轻量级的Linux环境,使得我们可以直接在Windows运行Linux命令。对于手机用户可以使用AidLux,它是基于ARM架构的跨生态(Android/鸿蒙+Linux一站式AIoT应用开发部署平台,非虚拟机模式提供原生Linux系统体验。而对于Linux和MAC用户,可以直接使用系统终端

时间转换

编程中,时间戳是一种常用的时间表示方式,它以秒或毫秒单位表示从某个特定时间点(通常是1970年1月1日午夜)开始经过的时间。但是,这种形式的时间戳并不直观,因此我们可以使用date命令进行转换例如,要将一个时间戳转换日期和时间,可以使用以下命令

date -d @1701267439

获取当前的时间戳,可以使用以下命令:

date '+%s'

如果需要精确毫秒的时间戳,可以通过以下表达式获取

echo $(($(date '+%s') * 1000 + $(date '+%N') / 1000000))

更多用法可以通过运行 date —help 了解,–help 选项也适用于其它命令。

常用操作命令

将常用的操作编写脚本,可以极大提高效率,减少重复劳动。比如测试下单交易时,需要反复清除重置Redis和MySQL中的数据,以避免被重复检查规则拦截。如果将清除数据指令放入脚本文件中,我们可以通过执行脚本文件实现一键清除。以下为一个脚本示例

redis-cli -h 127.0.0.1 << EOF
del redis_key1
incrby redis_key2 -1
EOF

mysql -h127.0.0.1 -uuser -ppassword -Ddatabase << EOF
update order set order_status='F'
where createtime>'2023-11-30 00:00:00'
and user_id=12345678;
EOF

上述示例使用 <<EOF 来表示一个命令输入的开始,EOF 表示命令输入结束两个标记之间内容,是客户端工具连接服务器执行语句

使用别名简化命令输入

通过使用别名,操作将更加高效,命令输入也更加简洁比如,我们经常需要连接到Redis以查看数据,可以为连接不同的Redis服务器设置不同别名

alias redis='redis-cli -h 127.0.0.1 --raw'
alias redisuat='redis-cli -h 192.168.10.100 -p 6179 -c -a password'

计算器

虽然桌面系统通常都有计算应用程序,但Shell中的计算功能更加灵活和易用。它不仅可以帮助您进行基本数学计算,还可以轻松地处理复杂计算,并且可以轻松查看计算历史记录例如,要计算两个数乘积,可以使用以下命令(注意:星号(*)需要转义,否则会当成通配符处理运算符两边要有空格):

expr 123 * 456

要计算字符串长度,可以使用以下命令:

expr length 'this is a string'

对于更复杂的计算,可以使用bc(Basic Calculator)命令。例如,要以两位小数精度计算浮点数,可以按照以下步骤进行:

首先,执行bc命令进入bc计算器:

bc

然后设置精度为2位小数

scale=2

接着输入要计算的表达式

1024/3

最后,按回车键得到计算结果

341.33

退出bc计算器,请输入 quit。此外,bc还可以进行进制转换例如,要将一个十六进制转换二进制数:

ibase=16
obase=2
ff
0
FF
11111111

通过以上示例可以发现,在当前版本bc中输入16进制数时只认可大写

下载文件

使用wget命令可以将http资源直接下载目标机器,避免了从本地中转的麻烦。以下为一个下载示例,通过 -O 选项可以指定下载文件保存文件名

wget 'https://xxx.com/yyy.tar.gz' -O zzz.tar.gz

如果有一定规律的多个URL需要下载到目标机器,可以使用循环生成URL来实现这一目标。以下是一个使用循环wget命令下载多个文件示例(本例仅输出wget命令的内容以直观展示结果,实际使用时去掉前面echo即可执行wget命令):

for i in {1..15}; do
    echo wget https://xxhost:80/xxx-$(printf "%02d" $i).gz;
done

以上示例使用$()执行shellprintf表示格式化输出

查找文件

如果想要查找某个特定的文件,可以使用find命令。例如,要查找当前目录及其子目录中名为file.txt的文件,可以使用以下命令:

find . -name file.txt

如果想在文件中查找特定的关键字,可以使用grep命令。例如,要查找文件file.txt包含关键字”hello“的行,可以使用以下命令(当被查找关键字中没有空格特殊字符时,引号可以省略):

grep hello file.txt

也可以使用 -E 选项启用扩展正则表达式匹配模式。例如查找包含“hello“或者包含“world”的行,或者查找包含3~5位数字的行:

grep -E "hello|world" file.txt
grep -E "[0-9]{3,5}" file.txt

如果想要在某些特定的文件中查找特定的关键字,可以通过管道(|)将上述两个命令相结合。例如,要查找当前目录及其子目录中名为file开头的.txt文件,然后在这些文件中查找包含关键字”hello”或者包含”world“的行 ,可以使用以下命令:

find . -name file*.txt | xargs grep -E "hello|world"

上面例子xargs作用是将find的结果文件列表转换成小块分段传递给后面的grep命令,如果只在当前目录查询,上述命令等价于这个命令:

grep hello file*.txt

如果想查找特定类型的文件(例如所有文本文件或所有PNG图像文件),可以使用file命令。例如,要查找当前目录及其子目录中所有文本文件,可以使用以下命令:

find . -type f -exec file {} ; | grep -i text

在上面的例子中,-exec选项用于执行指定的命令,file {} ; 是执行的命令,其中file是用于确定文件类型的命令,{}表示当前找到的文件名,;表示命令的结束。这个示例将查找当前目录及其子目录中的所有文件,并使用file命令确定每个文件的类型。然后,通过管道结果传递给grep -i text命令,用于过滤类型文本的文件。

计算摘要

文件的传递一般通过摘要值确保完整性,如md5。使用Shell命令可以方便地计算出文件摘要。例如,以下是一个使用md5sum命令计算文件摘要的示例

md5sum file.txt

这个命令将输出文件file.txt的MD5摘要值。如果需要计算多个文件的摘要,可以使用通配符(*),如下所示

md5sum *.txt

这个命令将计算所有扩展名为 .txt 的文件的MD5摘要值。类似地,也可以使用 shasum 命令或 sha256sum 命令或 sha512sum 命令来计算文件的摘要。

除了以上提到的命令之外,Shell还提供了许多其他有用的命令和功能,例如处理文本文件、管理进程查看系统信息等。学习掌握这些命令可以帮助大家更高效地进行编程系统管理

原文地址:https://blog.csdn.net/jerbo/article/details/134765788

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_34320.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注