shell--02

数组(array)

${#var}可以计算出变量的长度

一般而言,A=“a b c def” 这样的变量只是将 $A 替换为一个单一的字符串

但是改为 A=(a b c def) ,则是将 $A 定义为数组

bash 的数组替换方法可参考如下方法:

A[0]可以得到第一个元素

读取数组元素值的一般格式是${array_name[index]}

HOST0=第一个参数
HOST1=第二个参数
HOST2=第三个参数
HOSTS=(${HOST0} ${HOST1} ${HOST2})
echo ${HOSTS[2]}  #输出索引为2的参数
echo ${HOSTS[@]}  #输出的是所有参数
echo ${!HOSTS[@]} #输出的是数组的索引

let i+=8 等同于 ((i+=8)),但后者效率更高

使用&符号,将执行的函数放入后台执行

wait等待所有进程结束后退出脚本

多线程ping网断存活主机

#!/bin/bash
#检测某个网段内的所有主机(多进程版本)
#定义一个函数,ping某一台主机,并检测主机的存活状态
myping(){
ping -c2 -i0.3 -W1 $1  &>/dev/null
if  [ $? -eq 0 ];then
echo "$1 is up"
else
echo  "$1 is down"
fi
}
for i in {1..254}
do
  myping 172.40.63.$i &
done
wait
#使用&符号,将执行的函数放入后台执行,wait等待所有进程结束后退出脚本。
#这样做的好处是不需要等待ping第一台主机的回应,wait就可以继续并发ping第二台主机,>依次类推

$! shell最后运行的后台process的PID

进度条

#!/bin/bash
#定义一个显示进度的函数,屏幕快速显示|  / - \
rotate_line(){
INTERVAL=0.1                 #设置间隔时间
COUNT="0"                   #设置4个形状的编号,默认编号为0(不代表任何图像)
while :
do
    COUNT=`expr $COUNT + 1`          #执行循环,COUNT每次循环加1,(分别代表4中不同的形状)
    case $COUNT in                     #判断COUNT的值,值不一样显示的形状就不一样
    "1")                                 #值为1显示-
          echo -e '-'"\b\c"                    
          sleep $INTERVAL
          ;;
    "2")                               #值为2显示\\,第一个\是转义
          echo -e '\\'"\b\c"
          sleep $INTERVAL
          ;;
    "3")                              #值为3显示|
          echo -e "|\b\c"
          sleep $INTERVAL
          ;;
   "4")                             #值为4显示/
          echo -e "/\b\c"
          sleep $INTERVAL
          ;;
    *)                                #值为其他时,将COUNT重置为0
          COUNT="0";;
    esac
done
}
rotate_line

99乘法表

#!/bin/bash
for  i  in  `seq 9`
do
         for  j   in  `seq $i`
         do
                     echo -n  "$i*$j=$[i*j]  "
         done
         echo
done

使用死循环实时显示eth0网卡流量

#!/bin/bash
#使用死循环实时显示eth0网卡发送的数据包流量

while :
do
          echo  '本地网卡eth0流量信息如下: '
          ifconfig  eth0   |  grep "RX pack"  | awk  '{print $5}'
          ifconfig  eth0   |  grep "TX pack"  | awk  '{print $5}'
          sleep 1
done

指定文件用户添加

#!/bin/bash
#本脚本执行,需要提前准备一个user.txt文件,该文件中包含有若干用户名信息
for  i  in  `cat  user.txt`
do
         useradd  $i
         echo "123456" | passwd --stdin $i
done

更改后缀名

#!/bin/bash
#执行脚本时,需要给脚本添加位置参数
#脚本名  txt   doc(可以将txt的扩展名修改为doc)
#脚本名  doc  jpg(可以将doc的扩展名修改为jpg)

for  i   in   "ls *.$1"
do
        mv  $i    ${i%.*}.$2
done

扫描一个IP的端口

#!/bin/bash
IP=$1
first_port=$2
last_port=$3
function scanner

{
for ((port=$first_port; port<=$last_port; port++))
        do
                (echo >/dev/tcp/$IP/$port)> /dev/null 2>&1 && echo $port open || echo "$port closed"
        done
}

scanner

倒计时60秒

for((i=60;i--;i>0))
do
  echo -ne "please waite $i seonds \033[0K\r"
  sleep 1
done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small white poplar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值