1,[] 和 [[]] ,[] 不支持正则表达式,使用idea写shell的时候,它会给出一些代码提示,[]和[[]]区别,主要在shell if中使用_将将本将的博客-CSDN博客,有时候用[[]]替换[]会更好。
2,sshpass的远程执行命令参数中引用外部变量,要用双引号,使用单引号会出现报错提示,手动执行一遍发现单引号确实会报错,具体原因不知。
sshpass ssh ${ip} -o StrictHostKeyChecking=no "echo ${pub_str} >> /root/.ssh/authorized_keys"
3,可以使用read -a ,declare -a来新建一个数组,使用for in, for,while,seq来做遍历循环,
read -a all_cluster_ip <<< $(xms-cli -t ${token} host list | awk -F '|' '{if(NR>=4) print $8}')
4,shell有顺序,选择,循环,掌握这些基本的东西就能实现我们想要的效果
5,有些不常用命令的执行会出现莫名其妙的报错,要不停地改,试,百度,然后就可以了,特别是awk,写正则的时候感觉有点迷,因为不知道数据类型。
使用awk的if进行字符串比较的时候,普通字符串直接用$2=/str/,如果是true或false,要用$2=~/true/,如果是数字,就要$2==22。
如果使用 -v 传递参数,那有时候可以省略,比如 awk -v host_ip=${host_ip} -F '|' '{if($8~host_ip) print $5}'` ,加了'='反而不对。有时候需要是整数,可以使用awk的内置int()函数,使用'=='。
有问题就百度。