Shell 实践、常用脚本
(1)计算1-100的和。
#!/bin/bash n=0 for i in `seq 1 100` do n=$[$i+$n] done echo $n
(2)输一个数字,然后计算出1到数字的和,要求如果输入数字小于1,则重新输入,知道输入正确为止。
n='abc' if_num1() { m=`echo $1|sed 's/[0-9]//g'` if [ -z $m ] && [ $n -gt 1 ] then return 0 else return 1 fi } while ! if_num1 $n do read -p "num: " n done a=0 for i in `seq 1 $n` do a=$[$n+$i] done echo $a
(3)把root目录下所有目录(只需要一级)拷贝到/tmp/目录下。
cd /root/ for i in `ls ` do if [ -f $i ] then cp -rv $i /tmp/ fi done
find /root/ -maxdepth 1 –type d
(4)批量建立用户user_00,user_01..,user_100并且所有用户属于users组。
for i in `seq -w 0 100|sed 's/^0//g'` do useradd -g users user_$i done
seq –f “%02q” 0 100
(5)截取文件x.txt中包含关键字,‘root’的行钟的第二列用“:”号分割然后把截取的数字排序,然后打印出次数超过10次的列。
#!/bin/bash a_1=`cat /xiangsikai/li/1.txt | grep root |uniq -c|awk '$1>10'` echo "$a_1"
(6)输入一个IP不能大于255。不能小于0。
#!/bin/bash checkip() { if echo $1 | egrep -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ;then a=`echo $1 | awk -F. '{print $1}'` b=`echo $1 | awk -F. '{print $2}'` c=`echo $1 | awk -F. '{print $3}'` d=`echo $1 | awk -F. '{print $4}'` for n in $a $b $c $d;do if [ $n -ge 255 ] || [ $n -le 0 ];then echo "no of zhe IP >255" return 2 fi done else echo "no no no !!! 192.168.1.1" return 1 fi } rs=1 while [ $rs -gt 0 ];do read -p "IP: " ip checkip $ip rs=`echo $?` done echo "IP is right!"
(7).写一个脚本实现把一个目录下所有文件(不包括目录)全部在文件后面加一个.bak。
命令:cd /xiangsikai/li/ for i in `ls` do if [ -f $i ];then mv $i $i.bak fi done
注:还可以用 find /xiangsikai/li/ -type f
(8)写一个文件将当前目录下大于100k的文件移动到目录下。
#!/bin/bash for i in `find /xiangsikai/li/ -type f -size +10k` do mv $i /xiangsikai/shell/ti/ done
(9)写一个脚本获取本机的HOSTNAME,IP,DNS。
#!/bin/bash host=`hostname` echo "HOSTNAME:$host" ip_1=`ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'` echo "eth0:$ip_1" dns=`cat /etc/resolv.conf | grep "name" |awk '{print $2}'` echo "DNS:$dns"
(10)写两个脚本验证break和continue再循环中的作用。
for i in `seq 1 5` echo $i do if [ $i -eq 3] then break fi echo $i done 注:break改为continue。