Linux shell script

这里主要记载工作中用到的一些小脚本:(ps 我每次都会把最新写的放到第一位)

*、输入一个日期,可以知道此日期的上周四是几号

#!/bin/bash

DATA=$1
date -d $DATA +%w | awk '{print $0+3}' |xargs -i  date -d "$DATA {} days ago"  +%Y%m%d
# 首先 $1 是个位置变量,+%w 可以得出此日期是星期几,我们可以找到规律:周四到周日是距 3 天,这个不会变,我们把周四到周末加上星期几正好是 $1 到上周四的天数,然后指定 $1 的前 { 此为 $0+3 } 天,然后按格式 +%Y%m%d 就可以得出结果。

[root@localhost tmp]# ./a.sh 20140920
20140911       # 可以看到 9 月 20 号的上周四是 9 月 11 号

*、使文件中的两个字段相乘

[root@gameserver ~]# head -20 /var/tmp/1.csv   # 需要处理的文件 实际有 9181 行
::ffff:1.0.32.0,115,1809858,23.1167,113.25
::ffff:1.0.8.0,117,1809858,23.1167,113.25
::ffff:1.0.2.0,119,1814991,35,105
::ffff:1.0.1.0,120,1814991,35,105
::ffff:1.1.32.0,115,1809858,23.1167,113.25
::ffff:1.1.16.0,116,1809858,23.1167,113.25
::ffff:1.1.8.0,117,1809858,23.1167,113.25
::ffff:1.1.4.0,118,1810821,26.0614,119.3061
::ffff:1.1.2.0,119,1814991,35,105
::ffff:1.1.0.0,120,1814991,35,105
::ffff:1.3.0.0,112,1809858,23.1167,113.25
::ffff:1.2.64.0,114,1809858,23.1167,113.25
::ffff:1.2.32.0,115,1809858,23.1167,113.25
::ffff:1.2.16.0,116,1809858,23.1167,113.25
::ffff:1.2.0.0,119,1814991,35,105
::ffff:1.2.2.0,120,1814991,35,105
::ffff:1.2.6.0,119,1810821,26.0614,119.3061
::ffff:1.2.4.0,120,1814991,35,105
::ffff:1.2.5.0,120,1810821,26.0614,119.3061
::ffff:1.2.12.0,118,1809858,23.1167,113.25

[root@gameserver tmp]# cat a.sh           # 脚本内容
#!/bin/bash

key=`cat 1.csv | wc -l`
a=(`awk -F , '{print $3}' 1.csv`)
b=(`awk -F , '{print $4}' 1.csv`)

for ((i=0;i<$key;i++))
  {
     sum=$(echo ${a[$i]} \* ${a[$i]} \+ ${b[$i]} \* ${b[$i]} | bc)
     echo $sum >> a.txt
}

[root@gameserver tmp]# ./a.sh                # 执行脚本
[root@gameserver tmp]# cat 1.csv | wc -l     # 原数据行
9181
[root@gameserver tmp]# cat a.txt | wc -l     # 对应的值也有这么多行
9181

*、批量用新文件中的数据替换旧文件中的数据

[root@localhost tmp]# cat a.txt     # 要被替换的文件
a b c 192.168.1.1 d
a c b 192.168.1.2 e
a f v 192.168.1.3 f
[root@localhost tmp]# cat b.txt     # 用来替换的数据
172.16.1.1
172.16.1.2
172.16.1.3
[root@localhost tmp]# ./c.sh
[root@localhost tmp]# cat a.txt     # 替换结果
a b c 172.16.1.1 d
a c b 172.16.1.2 e
a f v 172.16.1.3 f
[root@localhost tmp]# cat c.sh      # 脚本内容
#!/bin/bash

oldip=(`awk '{print $4}' ./a.txt`)

newip=(`cat b.txt`)

for ((i=0;i<3;i++))
  {
    sed -i "s/${oldip[$i]}/${newip[$i]}/" ./a.txt
}

*、变量赋值 (将26个小写字母赋值给一个变量)

[root@localhost tmp]# echo a={a..z} | echo $a
a b c d e f g h i j k l m n o p q r s t u v w x y z

*、使用 expect 让 shell 可以自动完成登录多台服务器并执行相应的命令

#!/bin/bash

######################################
#                                    #
#          RedHat 小怪兽              #
#                                    #
#                   2014-06-12       #
#                                    #
######################################

list=("192.168.1.81 root 123456 df1" "192.168.1.82 root 123456 df2")

length=${#list[@]} ## 获取变量的个数,一个双引号为一个变量值

#echo $length

for ((i=0;i<$length;i++))
   {
    host=`echo ${list[$i]} | awk '{print $1}'`
    user=`echo ${list[$i]} | awk '{print $2}'`
    pass=`echo ${list[$i]} | awk '{print $3}'`
    desc=`echo ${list[$i]} | awk '{print $4}'`  ## 将每个变量值中的位数分别赋值给新的变量名
#    echo $a $b $c
    expect << EOF
    spawn ssh $user@$host;
    expect {
    "(yes/no)?" { send "yes\r"; exp_continue }  ## 第一次登陆会提示 yes or no
    "password:" { send "$pass\r" }
}
    expect "#"
    send "hostname > $desc.txt\rdf -h >> $desc.txt\rexit\r"  ## 多个命令可以直接连着写,记得加 \r
    expect eof  ## 等待进程结束
EOF
#    sleep 5
}

for ((i=0;i<$length;i++))
   {
    host=`echo ${list[$i]} | awk '{print $1}'`
    user=`echo ${list[$i]} | awk '{print $2}'`
    pass=`echo ${list[$i]} | awk '{print $3}'`
    desc=`echo ${list[$i]} | awk '{print $4}'`
    expect << EOF
    spawn scp $user@$host:/root/$desc.txt .
    expect "password:"
    send "$pass\r"
    expect eof
EOF
}

cat df*.txt > disk_sum.txt && rm -rf df*.txt  ## 将下载到的不同服务器的文件放到一起,方便查看
*、已知一些网卡名称,分别判断机器中的网卡名称是什么,并查看其连接状态

#/bin/bash
path=/etc/sysconfig/network-scripts/
div=`ls $path | awk '{print $1}' | grep ifcfg | awk -F - '{print $2}'`
for i in $div
do
for k in eth0 p5p1 em1 p7p1 enp2s0
do
if [ $k == $i ]
then
mii-tool -v $i | grep status | echo -e '\e[32m'$i'\e[m'`awk '{print $0}'`
fi
done
done
[root@localhost tmp]# ./a.sh
eth0 basic status: autonegotiation complete, link ok        ##  最终效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值