shell进阶

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%的警告

  • 18
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值