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读到的内容为空,导致循环提前结束。

  解决这个问题两种方式

  1. 使用ssh的-n参数:用/dev/null来当ssh的输入,阻止ssh读取本地的标准输入内容。ssh -n root@1.1.1.1 "echo $1"
  2. ssh xxxx < /dev/null 重定向shell命令的输入

7. centos系统查看磁盘类型

  cat  /sys/block/sda/queue/rotational,sda可修改

  返回0:SSD盘

  返回1:SATA盘
 
8. mv 短横线开头修改带短横线开头\空格开头的文件名如  -1ew.txt   
  问题原因是因为将短横线当成了选项参数标识,解决方法隐藏起来
  mv 1.txt  -1.txt   报错
  mv 1.txt ./-1.txt 成功
 
  mv '   A'  newname
 
9. centos环境异常重启之后,进入错误界面,显示journalctl 、 dm-0等
1
xfs_repair -v -L   /dev/dm-0
 
10. 脚本放后台执行,不打印任何日志
 **.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"

posted on   Kurenoki  阅读(94)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 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】
点击右上角即可分享
微信分享提示