shell相关总结1-100
centos7 系统
1、sed 匹配某个字段,但是修改的是下一个字段
1 | sed -i "/部署方式/{n;s/\\" value\\ ":.*/\\" value\\ ": \\" 2\\ "/}" 1.json |
2、linux主机互信
1 2 3 | ssh -keygen -t rsa ssh -copy- id -i /root/ . ssh /id_rsa .pub IP |
无ssh-copy-id命令情况下
1 | cat ~/. ssh /id_rsa .pub| ssh 10.0.1.1 "umask 077; mkdir -p .ssh;cat >> .ssh/authorized_keys" |
3、处理json文本,使用jq命令
1 2 | dic=` cat . /version .json` app_name=` echo $dic|jq '.app_name' ` |
4、脚本带参数执行 getopts命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | while getopts "i:c:n:ta:" opt; do case $opt in i) PlatformIp=$OPTARG;; c) ChannelNo=$OPTARG;; n) Num=$OPTARG;; t) type =1;; a) pass=$OPTARG;; esac done |
5.expect 用法举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ip=$1 password= "123456" expect <<EOF set timeout 30 spawn ssh -copy- id -i /root/ . ssh /id_rsa .pub $ip expect { "yes/no" { send "yes\n" ;exp_continue } "password" { send "$passws\n" } } expect "password" { send "$password\n" } EOF |
6. while循环内使用ssh 导致自动退出的问题解决方法
使用重定向,将文件内容输入到while命令,while命令每次使用read从输入中读取一行数据。
如果在while循环中调用了ssh命令,那么ssh就会把当前输入中所有的数据读走,也就是重定向给while命令的数据,都被ssh命令读走了,以至于下次循环的时候,read读到的内容为空,导致循环提前结束。
解决这个问题两种方式
- 使用ssh的-n参数:用/dev/null来当ssh的输入,阻止ssh读取本地的标准输入内容。ssh -n root@1.1.1.1 "echo $1"
- ssh xxxx < /dev/null 重定向shell命令的输入
7. centos系统查看磁盘类型
cat /sys/block/sda/queue/rotational,sda可修改
返回0:SSD盘
1 | xfs_repair - v -L /dev/dm-0 |
**.sh >/dev/null 2>&1 &
11.安卓脚本后台执行之后无法退出adb,提示You have running jobs
adb -s *** shell "sh **.sh >/dev/null 2>&1 &"
12.多个文本合一错行合一
cat 1.txt |while read lines; do echo $lines >> new.txt;echo >>new.txt; done
cat 2.txt |while read lines; do sed -i "0,/^$/s/^$/$lines/g" new.txt ; done
13:vim/vi
14: vim 设置文本格式 dos or unix
:set ff=unix #转换为unix格式
:set ff=dos #转换为windows格式
15:前一个命令的输出作为grep的输入时需要为标准输出,如果是error 则忽略
需要查询错误里的内容作为输入 2>&1 把error输出到标准输出1中
adb shell "am start -n com.android.settings/.settings" 2>&1 |grep -i error
subprocess.getoutput(f"adb -s {deviceid} shell mkdir -p /data/local/tmp/ufs/{fileSize}kfile/{i}/")
subprocess.getoutput(f"adb -s {deviceid} shell \"cd /data/local/tmp/ufs/{fileSize}kfile/{i}/;dd bs={fileSize}k count=10000 if=/dev/zero |split -b {fileSize}k -a 5\"")
cmd = f"find /data/local/tmp/ufs/{fileSize}kfile/{i}/ -name \"x*[a,c,e,g,i,k,m,o,q,s,u,w,y]\" |xargs rm -rf"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】