shell相关总结1-100

centos7 系统

1、sed 匹配某个字段,但是修改的是下一个字段

sed -i "/部署方式/{n;s/\\"value\\":.*/\\"value\\": \\"2\\"/}"  1.json

2、linux主机互信

ssh-keygen -t rsa

ssh-copy-id -i /root/.ssh/id_rsa.pub  IP

无ssh-copy-id命令情况下

cat ~/.ssh/id_rsa.pub|ssh 10.0.1.1 "umask 077; mkdir -p .ssh;cat >> .ssh/authorized_keys"

3、处理json文本,使用jq命令

dic=`cat ./version.json`
app_name=`echo $dic|jq '.app_name'`

4、脚本带参数执行 getopts命令

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 用法举例

  

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等
  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 2020-11-09 16:31  Kurenoki  阅读(113)  评论(0)    收藏  举报

导航