1.求0-200的总和
#! /bin/bash
sum=0
for i in `seq 1 200`
do
sum=$[$i+$sum]
done
echo $sum
以上为0-200的总和的一个代码,首先需要将sum赋值为零,i从1取到200,每取一个数进行累加,并输出最终结果
注:如果echo放在done前,会输出每次累加的结果,直到i等于200
2.求1-n的总和
#! /bin/bash
n=0
while [ $n -lt 1 ]; do
read -p "Please input a number,it must greater than 1:" n
done
sum=0
for i in `seq 1 $n`
do
sum=$[$i+$sum]
done
echo $sum
其中while的作用就是防止输入小于1的数,当输入小于1的数时,会无限循环,直到输入的数大于等于1,然后开始执行1-n的累加
3.打印指定三角
#! /bin/bash
read -p "Please a number:" a
for i in `seq 1 $a`
do
for ((j=$a;j>i;j--))
do
echo -n " "
done
for ((k=1;k<=i;k++))
do
echo -n "* "
done
echo
done
以上为输入大小,以该大小为边长,输出对应的等边三角形
我们了解到,输入3的话,在第一行需要先输入2个空格加1个,第二行是1个空格2个,第三行零个空格3个*
空格的数量是我们输入边长的大小-1,随着行号增加而减少
*的数量与行号相同
设空格数量为j,输入边长为a,*数量为k,行号为i
行号i的取值范围就是1-a,用shell表示为seq 1 $a
每行*数就是1-a,用shell表示为seq 1 $a,还可以表示为
k=1;k<=i;k++(开始为1,最大值为i)
那么空格数就等于 j=$a;j>i;j--(开始为a,最小值为i+1)
4.shell检查并拷贝目录
-e filename 如果filename存在,则为真
-d filename 如果filename为目录,则为真
-f filename 如果filename为常规文件,则为真
-L filename 如果filename为符号连接,则为真
-r filename 如果filename可读,则为真
-w filename 如果filename可写,则为真
-x filename 如果filename可执行,则为真
-s filename 如果filename长度不为0,则为真
-h filename 如果filename为软连接,则为真
filename1 -nt filename2 如果filename1比filename2新,则为真
filename1 -ot filename2如果 filename1比filename2旧,则为真
#! /bin/bash
cd /root
for i in `ls `
;
do
if [ -d $i ]; then
cp -r $i /tmp
fi
done
以上代码为一个简单的拷贝目录,首先判断/root路径下的目录,若为目录则将目录及其内容拷贝到/tmp临时目录中
注:/tmp这个目录通常用于存储临时文件和临时目录,这些文件在系统重启后会被删除
5.批量添加用户
#! /bin/bash
groupadd wudi
for i in `seq -w 0 11`
; do
useradd -g wudi yonghu$i
done
groupadd wudi:创建名为wudi的组
seq -w:用于在列前添加0,以保持列宽相同。
useradd -g wudi yonghu$i:在wudi这个组创建名为yonghu$i的用户($取值为0-11)
运行完成后,我们就添加了12个用户
cat /etc/group 查看组,我们在里面就能看到wudi这个组了
cat /etc/passwd 查看用户基本信息,我们就能看到yonghu01-yonghu11的基本信息了
ll /home 查看用户,我们就能看到yonghu01-yonghu11
6.批量删除用户
#! /bin/bash
for i in `seq -w 0 11`
; do
userdel -r yonghu$i
done
groupdel wudi
先删除yonghu01-yonghu11用户,再删除wudi组
7.查找内容并排序
#! /bin/bash
awk -F ':' '$0~/oo/ {print $1}' /tmp/text.txt > /tmp/n.txt
sort -n /tmp/n.txt | uniq -c | sort -n > /tmp/n2.txt
awk '$1>2 {print $2}' /tmp/n2.txt
以上就是一个简单的查找指定内容并排序的脚本,不懂的awk的小伙伴可以看下我之前发布的awk的解析
sort -n:将输入的每一行视为数值,并根据这些数值的大小进行排序。
uniq -c:忽略文件中的重复行
8.脚本函数的定义
#! /bin/bash
f_judge(){
if [ -d /tmp/log ]; then
cp /var/log/* /tmp/log
else
mkdir -p /tmp/log
exit
fi
}
f_judge
创建脚本函数f_judge,如果/tmp/log为目录,则将/var/log目录下所有的内容复制到/tmp/log里,如果/tmp/log不存在,则创建/tmp/log目录
9.脚本函数定义(循环)
#! /bin/bash
function message (){
echo "1:w"
echo "2:ls"
echo "3:quit"
read -p "Please input a number:" a
}
message
while [ $a -ne '3' ]; do
case $a in
1)
w
;;
2)
ls
;;
3)
exit
;;
*)
echo "nuknown command"
;;
esac
message
done
循环解析:while [ $a -ne '3' ]; do如果输入的内容不等于3(退出),就继续以下循环,函数message需要放在循环中,当输入值不等于3时,需要继续输出message函数,其中w,ls为命令操作
10.脚本IP地址检测
#! /bin/bash
function 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 -gt 255 ] || [ $n -lt 0 ]; then
echo "the number should greater than 255 and less than 0" return 2
fi
done
else
echo "Input is something wrong,the format is like 192.168.100.1"
return 1
fi
}
re=1
while [ $re -gt 0 ];do
read -p "please input the ip" ip
checkip $ip
re=`echo $?`
done
echo "The ip is right"
这个脚本用于检测输入ip地址是否复合规范
解析:echo $1表示输入的ip地址
echo $?表示上一步结束返回的值
11.添加删除用户脚本
#! /bin/bash
if [ $# -eq 0 -o $# -gt 2 ]
then
echo "user $0 --add username or $0 --del username or $0 --help"
exit 1
fi
case $1 in
--add)
n=0
for u in `echo $2|sed 's/,/ /g'`
; do
if awk -F ':' '{print $1}' /etc/passwd | grep -qw "$u"; then
echo "the user $u exist"
else
useradd $u
echo -e "$u\n$u"|passwd $u >/dev/null 2>$1
echo "the user $u added successfully."
n=$[$n+1]
fi
done
if [ $n -eq 0 ]; then
exit 2
fi
;;
--del)
n=0
for u in `echo $3|sed 's/,/ /g'`
; do
if awk -F ':' '{[print $1}' /etc/passwd|grep -qw "$u"
then
userdel -r $u
echo "The user $u deleted successfully."
n=$[$n+1]
else
echo "the user $u not exist."
fi
done
if [ $n -eq 0 ]; then
exit 3
fi
;;
--help)
echo -e "--add can add user,and the passwd is the same as username.It can add multiuser such as --add user1,user2..."
echo "--del cat delete user.it can delete user such as --del user1,user2..."
;;
*)
echo "use $0 --add username or $0 --del username or $0 --help"
exit 1
;;
esac
使用方法:在执行程序时 后面加上--add等
12.监控cpu使用率
#! /bin/bash
ip=`ifconfig -a |sed -n "2"p | awk '{print $2}'`
while :
do
idle=`top -bn1 | sed -n '3p' |awk -F ',' '{print $4}' | cut -d . -f1`
use=$[100-$idle]
if [ $use -gt 1 ]
then
echo "$ip is cpu usage rate greater ${use}%."
fi
sleep 2
done
每两秒输出1次cpu超过1%的警告