Shell 实践、常用脚本

(1)计算1-100的和。

#!/bin/bash
n=0
for i in `seq 1 100`
do
n=$[$i+$n]
done
echo $n
View Code

 

(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
View Code

 

(3)把root目录下所有目录(只需要一级)拷贝到/tmp/目录下。

cd /root/
for i in `ls `
do
if [ -f $i ]
then
cp -rv $i /tmp/
fi
done
View Code
find /root/ -maxdepth 1 –type d
View Code

 

(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
View Code
seq –f “%02q” 0 100
View Code

 

(5)截取文件x.txt中包含关键字,‘root’的行钟的第二列用“:”号分割然后把截取的数字排序,然后打印出次数超过10次的列。

#!/bin/bash
a_1=`cat /xiangsikai/li/1.txt | grep root |uniq -c|awk '$1>10'`
echo "$a_1"
View Code

 

(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!"
View Code

 

(7).写一个脚本实现把一个目录下所有文件(不包括目录)全部在文件后面加一个.bak。

命令:cd /xiangsikai/li/

for i in `ls`
do
if [  -f $i ];then
mv $i $i.bak
fi
done
View Code
注:还可以用 find /xiangsikai/li/ -type f 
View Code

 

(8)写一个文件将当前目录下大于100k的文件移动到目录下。

#!/bin/bash
for i in `find /xiangsikai/li/ -type f -size +10k`
do
mv $i /xiangsikai/shell/ti/
done
View Code

 

(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"
View Code

 

(10)写两个脚本验证break和continue再循环中的作用。

for i in `seq 1 5`
echo $i
do
if [ $i -eq 3]
then
break
fi
echo $i
done
注:break改为continue。
View Code

 

posted @ 2018-01-15 20:16  kevin.Xiang  阅读(...)  评论(...编辑  收藏