shell各种功能模块样例总结.sh
#!/bin/bash
################
#标题:shell总结
#作者:破仔
#时间:2020-1-2
###############
#一、
#加上这个,在交互的时候可直接使用后退键,不然需要同时按住ctrl才能生效
stty erase ^h
#二、
#echo 命令
#置空文件-1
echo "" > $output
#置空文件-2
echo > $output
#三、
#循环读取文件并操作-1
#while命令实现循环 while read line #读取每一行,置于变量line中 do group=`echo $line |awk '{print $1}'` #获取变量line中的第一点,置于变量$group中 cp template $template_file #sed命令实现置换 sed -i "s/lgroup/$group/g" $template_file #置换文件中的某些指定部分,如template中的lgroup换成变量$group代表的值 cat $template_f>>$output #将变量$template_f的内容追加到变量$output代表的文件中 rm $template_f done < $1 #读取shell命令后的第一个文件,如 sh xx.sh host 中的host
#循环读取文件并操作-2
filename=df.txt #将文件置于变量$filename中 #for命令实现循环 for line in $(cat $filename) # 读取变量filename中的每一行 do echo $line #控制台输出行 #awk命令 获取想要的内容 G=`echo $line | awk -F: '{print $2}'` #获取值,置于变量%G中 F=`echo $lin e | awk -F: '{print $5}'` #获取值,置于变量%F中 #if命令进行比较 if [[ $G -ge 100 ]];then #如果变量G大于100为真,此处用[[]]将变量G变成数值才能比较 if [[ $F -le 20]];then #如果变量F小于20为真 #awk命令 获取想要的内容 echo $line |awk -F: '{print "'$ip'"" "$1,$2"G",%5"%",$6}' >>dfvs.txt #输出内容到文件,双引号""将想要的内容加到输出里,变量再加单引号'' fi fi done
#四
#控制台显示进度效果
IP_PASSWORD=./ip-password.txt i=1 l=$(wc -l $IP_PASSWORD |sed 's/^[ \t]*//g' | cut -d ' ' -f1) #去掉空行。计算行数,置于变量l #for循环 for IP in $(cat $IP_PASSWORD) do #cut命令 获取想要的内容 ip=$(echo "$IP" |cut -f1 -d ":") #cut -f1 -d ":" 以":"为分隔符去第一个字段 password=$(echo "$IP" | cut -f2 -d ":") # ssh-copl-id to remote tmp #epect 命令 自动进行交互 epect -c " # already exist ~/.ssh dir spawn ssg-copy-id ybsre@ip #输入要执行的命令 expect { \"*yes/no*\" {sed \"yes\r\"; exp_continue} \"*password*\" {sed \"$password\r\"; exp_continue} \"Password*\" {sed \"$password\r\"; exp_continue} #根据反馈进行下一步的输入 } " >/dev/null #echo -en用法 echo -en "\b\b\b\b\b" `echo $i*100/$l |bc`'%' #输出进度条,通过变量i*100除以变量l得到百分比 ((i++)) done echo -e '\b\b\b\bOK ' #最后输出结果ok
#五
#shell中的函数
getConnection $ip $port #函数调用 function getConnection() #函数内容 { #timeout命令 rt=`timeout 3 telnet $1 $2 2>$1` #超过3秒自动停止执行命令 echo "$rt" |grep Connected >/dev/null if [ $? == "0" ];then #$?代表上个命令执行结果,0代表成功,其他代表失败 echo "telnet $! $2 is ok" else echo "telnet $! $2 is failed" fi }