calmzhu
V2EX  ›  程序员

在线代写各种 shell 小脚本:我就想看看都有哪些好玩的需求

By calmzhu at 2020 年 8 月 25 日 · 7942 次点击
不管是

服务器管理的,
或者各位使用 Linux 觉得需要有些功能的。。
都行。


免费写的玩,不要太长的。
第 1 条附言  ·  2020 年 8 月 25 日
发现好多好玩的东西。
感觉我在钓鱼。。
61 条回复  •  2020-09-17 21:34:03 +08:00
levelworm
   1
levelworm  
   2020 年 8 月 25 日 via Android
这个不错,正好在学 shell 准备拿来练手。。。
lxk11153
   2
lxk11153  
   2020 年 8 月 25 日
aheadlead
   3
aheadlead  
   2020 年 8 月 25 日
求大佬:

stdin: 输入一段字节流,保证每个字节是 [0-9A-F]。每两个字节实际上是十六进制表示的“一个字节”。输入的字节数保证是 2 的倍数。
stdout: 求输出 binary 。

例如:

stdin: 68656C6C6F2C20776F726C640A
stdout: hello, world

今天用到了这个,实在一下子想不出,用 py 写了。。。
calmzhu
   4
calmzhu  
OP
   2020 年 8 月 25 日
@lxk11153

这个 properties 是不是就是纯粹 k:string = v:string 的格式?
calmzhu
   5
calmzhu  
OP
   2020 年 8 月 25 日
@aheadlead
#!/bin/bash

python xxxx.py

手动狗头。

bash 就是杂烩。纯 bash 干不了太多。都靠各种工具。
dorothyREN
   6
dorothyREN  
   2020 年 8 月 25 日
各种花式删库,删 root
teawithlife
   7
teawithlife  
   2020 年 8 月 25 日   ❤️ 5
@aheadlead #3
$ echo '68656C6C6F2C20776F726C640A' | xxd -r -p
hello, world
aheadlead
   8
aheadlead  
   2020 年 8 月 25 日
@teawithlife #7 今天没耐心看这个 manpage 。。。原来少了个-p
AlisaDestiny
   9
AlisaDestiny  
   2020 年 8 月 25 日
@aheadlead 你这个功能 Linux 本身就有啊,echo 68656C6C6F2C20776F726C640A | xxd -r -ps
MZRME
   10
MZRME  
   2020 年 8 月 25 日
dd cc 脚本
yuanfnadi
   11
yuanfnadi  
   2020 年 8 月 25 日
把 git commit -> json
然后再把 json -> commit
CismonX
   12
CismonX  
   2020 年 8 月 25 日 via iPhone   ❤️ 1
写一个 quine (执行的输出结果为程序自身的源码),要求:不能为空,不能接受任何形式的输入(包括读文件系统、读环境变量),不能调用第三方程序(比如 /usr/bin 下面那些)
everydaystruggle
   13
everydaystruggle  
   2020 年 8 月 25 日
我来说一个,求各位思路。
经常需要运行一堆任务,每个都会调用一个 gpu 。希望用 bash 写个任务池,能保持 3 块 gpu 都有任务在跑,直到这一堆都跑完。
每个 gpu 都跑一个任务就能。
sarvatathagata
   14
sarvatathagata  
   2020 年 8 月 25 日   ❤️ 2
把 https://cmdchallenge.com/上面的每个 challenge 每个都过掉
mlhadoop
   15
mlhadoop  
   2020 年 8 月 25 日
秒杀脚本
期望能够在指定在某个具体时间点,尽可能快速往指定网址发送 http 请求,实现对卡券等秒杀。
1. 要求脚本能够定时执行
2. 能够并发调用 curl 完成对目标 site 的请求,并发数可设置
3. 对 2 中 curl 兼容 cookie 的设置
rrfeng
   16
rrfeng  
   2020 年 8 月 25 日 via Android
@sarvatathagata
手机解了十几个…前面题目太简单了
rrfeng
   17
rrfeng  
   2020 年 8 月 25 日 via Android
@everydaystruggle
shell 并发控制,有点意思。
debuggerx
   18
debuggerx  
   2020 年 8 月 25 日
现状:linux 服务器开机后一般会停在登陆界面,需要手动输入帐号和密码后才能操作
需求:希望开机后自动运行 htop,这样服务器即使断电重启后监视器也能方便地直接看到运行状态

这个脚本我以前写过,但是忘了备份,家里那台服务器挂了以后重装还想要原来的效果,但是想不起来怎么写的开机脚本了,又不想再写一遍……
sarvatathagata
   19
sarvatathagata  
   2020 年 8 月 25 日
httplife
   20
httplife  
   2020 年 8 月 26 日
计算并列出 IP 段?

例如 sh ip.sh 192.168.0.0/19
列出所有可用 ip ?网关?
ivyliner
   21
ivyliner  
   2020 年 8 月 26 日 via Android
@httplife ipcalc 了解一下
Mutoo
   22
Mutoo  
   2020 年 8 月 26 日
需求:对 sudo 进行 MITM 攻击。使用 sudo 时无感知,将用户输入的密码保存到 /tmp/evil.txt 里,例如

$ sudo vi /etc/hosts
password:
Sorry, try again.
password:
$ cat /tmp/evil.txt
wrongpassword
correctpassword
ivyliner
   23
ivyliner  
   2020 年 8 月 26 日 via Android
@everydaystruggle xargs 了解一下, 可能是个思路
xrds7986
   24
xrds7986  
   2020 年 8 月 26 日 via Android
想封鎖某網站的 ip,需从多個 dns 解析,結果去除重複。
zbn
   25
zbn  
   2020 年 8 月 26 日
一个别人的 bash 脚本,里面有选项 1,2,3,4,5 。接下来还有二级菜单 1,2,3,4,5 。

怎样写个脚本能自动输入选项,去对他的脚本交互。
httplife
   26
httplife  
   2020 年 8 月 26 日
@ivyliner
ipcalc 一般 显示 类似:
Network: 192.168.0.0/24
Broadcast: 192.168.0.255
HostMin: 192.168.0.1
HostMax: 192.168.0.254
Hosts/Net: 254

但 HostMin 实际是 网关,

想要实现的是:
网关:192.168.0.1
可用 IP:
192.168.0.2
192.168.0.3
192.168.0.4
....一直到最后

最后能提供 类似
ip addr add <可用 IP> dev eth0
zsdroid
   27
zsdroid  
   2020 年 8 月 26 日
运行下脚本,我支付宝就多一块钱。这个需求怎么样
yuanbo6
   28
yuanbo6  
   2020 年 8 月 26 日
可以考虑 tcpdump 抓包衍生出来的工具吧,最好可以后台执行然后自动分片保存,虽然我知道 nohup&的用法,也知道 tcpdump 的-C 参数怎么用,但是我懒得写脚本(手动狗头)
lxk11153
   29
lxk11153  
   2020 年 8 月 26 日
@calmzhu #4 不是我的需求,你可以和那楼主交流一下
我的需求: /t/690956 谢谢[doge]
kimqcn
   30
kimqcn  
   2020 年 8 月 26 日
麻烦帮忙写一个简单的 oracle 客户端脚本,可以创建数据库,编辑表,增删改查。
zhve2x4
   31
zhve2x4  
   2020 年 8 月 26 日
@httplife 网关不一定是 1,我以前经常把网关设置成靠后的 ip
stille
   32
stille  
   2020 年 8 月 26 日
求帮忙写个脚本

在当前目录下,查找该目录下,及所有多层级子目录下的 多个文件 (*.txt *.log *.zip 等),并剪切(mv)到指定目录,同时同名文件自动重命名...
Dihambo
   33
Dihambo  
   2020 年 8 月 26 日 via iPhone
超简单的一个,百度文库签到😅😅😅
yorks
   34
yorks  
   2020 年 8 月 26 日
find 找到出最新创建的文件( 30min 以内)
yorks
   35
yorks  
   2020 年 8 月 26 日
@yorks #34:"https://v2ex.com/t/701389#r_9420334"

-newerXY

```bash
-type f -newermt "$(date -d "30 min ago" +"%F %T")"
```
Lufs
   36
Lufs  
   2020 年 8 月 26 日 via Android
去除文本文件中的所有的 emoji 表情,并把结果重新写入文件。🤣
xurunfei
   37
xurunfei  
   2020 年 8 月 26 日
properties 转 yaml 小工具,要求保留注释,有 python 的就更好了
calmzhu
   38
calmzhu  
OP
   2020 年 8 月 26 日
@yuanfnadi
是指 git commit log 换成 json 格式?

@CismonX
关注点是啥,不通过外部输入获取程序执行信息的内容,还是代码输出刚好是自身的特殊逻辑。搜到一个这种
?
https://john.dev/posts/2019-02-29-quine.html


@everydaystruggle
任务调用的时候能指定 gpu 么。
这样可不可行?
1. 每个 GPU 搞个临时文件。存放当前这个 GPU 上正在云项的任务个数。
2. 然后启动任务用同一个脚本。脚本对要执行的任务进行装饰。 启动时计数器加 1,执行完了-1.。
3. 设致单个 GPU 允许最大进程数。启动任务时检查,选择当前计时器最低的那个 GPU,如果全满,等待。

@sarvatathagata
昨晚过了一阵子。。这个有多少个啊。先 mark


@mlhadoop
cookie 来源是啥。不考虑站点反爬虫限制的话。
先 curl login 一下存 cookie 到文件,然后后台同时多进程 curl 指定这个 cookie 发输出
定时执行的话,放 crontab 就行了。
多进程,不用多线程。。


@debuggerx
这个不用脚本。。 现在应该都是 systemd 了,直接用 systemd unit file 注册成系统服务并且开机自动启动就可以。

@httplife
关注点是啥。通过掩码计算 IP 段,还是扫描局域网里面可用的 IP 地址(以 ping 为依据判断的情况下)
然后,这个网关应该没法判断。网段内网关地址又没限制。查看本机的网关还有可能。
@Mutoo
有 root 权限了?


@xrds7986
可以这样翻译需求么
输入是若干 DNS,输出是这些 DNS 解析后的所有 IP 然后去重。
封 IP 的操作,在哪做,我理继是拿到 IP 列表后去网关 /防火墙之类的。


@zbn expect 应答可以么

@zsdroid

同求,找到了借我一下,我只要每次转一分就好

@lxk11153
你这个也不是你的需求。是几乎所有 IT 人的需求。。。

@kimqcn
Oracle  不会。。。没接触过



@stille
吃个饭先。。。
xrds7986
   39
xrds7986  
   2020 年 8 月 26 日
@calmzhu 没错,就是这个意思,脚本提示我输入网址,然后通过若干 DNS 解析,IP 结果输出到一个文本。
calmzhu
   40
calmzhu  
OP
   2020 年 8 月 26 日
@xrds7986

可以试一下这个 shell 命令。把域名写在文本里面。dig -f 一下。然后从输出中过滤出 DNS 解析记录再提取 IP 去重
https://paste.ubuntu.com/p/Nc4mZJRTHF/
calmzhu
   41
calmzhu  
OP
   2020 年 8 月 26 日
@stille
看一下这个
https://paste.ubuntu.com/p/9QtnkSYnN3/

先 find 找到所有符合后缀的文件。
然目标目录中不存在的直接 mv
存在的则跟据文件原来全路径把“/”替换成“_"重新命名,比如
/a/b/c/d.sh --> /targetdir/_a_b_c_d.sh
calmzhu
   42
calmzhu  
OP
   2020 年 8 月 26 日
@Dihambo
这个先放着。百度好像有限制。我之后看看


@Lufs Unicode 定义的那个 emoji? 查下 Unicode 里面 emoji 对应的码范围。binary 模式直接改字节应该可以


@xurunfei
properties 完整规范不熟悉的。我只知道基础的 string=string 这种。

先跑一下这个命令 find . -name "*.properties" -exec grep -vE '^(\S.*=|#|$)' {} \;
看一下,去除#开头注释行,空行,string=string 的行还有啥 内容
lxk11153
   43
lxk11153  
   2020 年 8 月 26 日
@calmzhu #38 哈,那来一个我的: 执行后能有人往 xhgxa.ml 里打钱的 [doge]
calmzhu
   44
calmzhu  
OP
   2020 年 8 月 26 日
@lxk11153 这二维码太讨厌了,挡着我看美女背景板
stille
   45
stille  
   2020 年 8 月 26 日
@calmzhu 谢谢,可用.
首行改为了 target_dir=$(dirname $(readlink -f $0))
就可以在当前文件夹来执行 sh 了.
T5eng
   46
T5eng  
   2020 年 8 月 26 日
传入集群 IP 列表<10.0.0.1, 10.0.0.2, 10.0.0.3, ... >,
通过 shell 脚本配合 Docker 或 Docker Compose 启动 zookeeper 集群和 kafka 集群.

能做到吗?麻烦吗?
calmzhu
   47
calmzhu  
OP
   2020 年 8 月 26 日
@T5eng
zookeeperv 不熟。
K8S 部署过 kafka
但是这个重点不在 shell 啊。就是集群的安装步骤命令啊。

然后传一下集群 IP 地址
x97bgt
   48
x97bgt  
   2020 年 8 月 26 日
跳板机的 IP 和密码都在剪贴板中,运行脚本就可以自动登录。同时在跳板机里进一步登录,进入服务器(命令也是 ssh [email protected],然后输入密码)

这个有办法实现不?
xcstream
   49
xcstream  
   2020 年 8 月 26 日
从国内源 一键下载 python node java 等编程软件
calmzhu
   50
calmzhu  
OP
   2020 年 8 月 26 日
@x97bgt 这个直接用 ssh config 更省事,跳转的化用 ProxyCommand


@xcstream 这个整个操作系统做镜像吧,亲。
x97bgt
   51
x97bgt  
   2020 年 8 月 26 日 via iPhone
@calmzhu ssh config 可以监听剪贴板?关键是每次获取的的跳板机 ip 与密码都不一样,手动敲入很烦。
calmzhu
   52
calmzhu  
OP
   2020 年 8 月 26 日
@x97bgt
可以用 exepct 应答加 剪贴板工具。

在 mac 测试了下。下面的脚本是可以的
https://paste.ubuntu.com/p/TgXYp9kmmt/

先说思路。具体实现要根据你的剪贴板格式,系统,用户名改。还有判断下可能的异常

1. 用 pbpaste(mac) xclip(linux)等工具获得剪贴板内容。并解析出用户名密码主机地址

2. expect 中用 spawn 启动 ssh 连接进程。然后自动应答帐户 /密码 /主机确认这些

3.进入交互模式,也就是 ssh 命令行。
baobao1270
   53
baobao1270  
   2020 年 8 月 27 日
1 、Minecraft 服务器管理,比如封号踢人什么的
2 、Lets Encrypt 证书跨服务器同步脚本(用 scp 命令)
3 、云服务器 Linux DD 到 Windows Server
qwerthhusn
   54
qwerthhusn  
   2020 年 8 月 27 日
来个脚本,谢谢 https://paste.ubuntu.com/

./replacefile.sh <dirFrom> <dirTo>
读取 dirFrom 下的文件( dirFrom 下面不会有文件夹,如果有直接报错,只有文件)

然后在 dirTo 下搜索重名的文件(可能有多层目录),如果在 dirTo 下面正好匹配上且只有一个,就把这个文件替换过去,如果匹配到多个或者没有匹配到,就打印一个警告。

示例:dirFrom/1.txt
dirTo/a/b/c/d/1.txt ,就把 dirFrom/1.txt 覆盖到 dirTo/a/b/c/d/下面
lllllliu
   55
lllllliu  
   2020 年 8 月 27 日
打包文件加,按日期命名并发送邮件。。
还有 MYSQL 备份脚本?
calmzhu
   56
calmzhu  
OP
   2020 年 8 月 27 日
@baobao1270

1. Minecraft 这个封装 api (如果有的化)吧
2. 你都已经答了 scp 吧。
3. dd + scp 吧。大就多 dd+scp 几次


@qwerthhusn
你这是要个文件夹比较工具吧。diff?


@lllllliu
没有细节写不了代码。
打包文件这个,tar + date + email 几个命令串一下就可以了

MYSQL 备份的化。不大用 mysqldump 到 sql 。大的化走 bin 文件备份
calmzhu
   57
calmzhu  
OP
   2020 年 8 月 27 日
@qwerthhusn
然后匹配的化。算不算路径输结构。

比如 dirTo/a/a.txt dirTo/b/a.txt 这种是希望 dirTo 的 copy 过去,还是在 dirB 里面建一个 a/a.txt 的结构。
dijia478
   58
dijia478  
   2020 年 8 月 27 日
写个定时任务,每周去 http://117.39.29.75:8085/pricePublic/house/public/index 网站拉下来所有房价,按照每 10 平米一个区间,统计每个区间的均价。随着执行次数,最后汇总出趋势图
stebest
   59
stebest  
   2020 年 8 月 27 日
@aheadlead xxd 命令直接转
qwerthhusn
   60
qwerthhusn  
   2020 年 8 月 27 日
@calmzhu 不是文件夹比较工具,说一下情况,你就明白啥意思了
我是 Java 开发,现在项目本地不能跑,只能放在服务器上,但是 Spring Boot 打包到上传又太久,经常需要改一点代码,更新应用,重启,有问题继续改。。。所以把应用摊开了。对于改动很小时,可以替换个 class 文件

在本地我都是直接用 everything 搜到那个 XXXService.class YYYService.class,然后替换到 app/classes/com/example/xxx/service/XXXService.class 和 app/classes/com/example/yyy/service/XXXService.class

现在我想直接把 XXXService.class 和 YYYService.class 放在某个固定的目录
然后脚本自己去 app/目录找同名的文件(判断应该只有一个匹配,如果有多个肯定就不能这么搞了)然后自动将这两个文件放到指定的目录下
asmoday320
   61
asmoday320  
   2020 年 9 月 17 日
求大佬:

在 kettle 使用 ftp 上传‘‘文件名带有中文’’的文件,文件名会直接乱码,想求一个 shell 脚本可以直接把一个文件夹内的 csv 文件全部转移到 ftp 文件夹内,能保证名称无乱码,鞋鞋~
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 113ms · 3.9.8.5