shell训练计划30天之第十八天

例31 获取网卡ip

要求:提示输入网卡名字,然后我们用脚本输出网卡的IP,需要考虑以下问题:

1.输入的字符符不符合网卡名字的规范,如何应对

2.名字符合规范,但是没有这个网卡又如何应对

要点:

ip add show dev eth0

 

#!/bin/bash

ip add | awk -F ':' '$1 ~ "^[1-9]" {print $2}' > /tmp/eth.list

while :

do

read -p "Please input a if name (The eths is ` Cat /tmp/eth.list|xargs`): " eth

if [ -z "$eth" ]

then

echo "Please input a if name."

continue

fi

if ! grep -qw "$eth" /tmp/eth.list

then

echo "The if name is error"

continue

else

break

fi

done

 

if_ip()

{

ip add show dev $1 | grep ' inet ' | awk '{print $2}'|awk -F '/' '{print $1}' >/tmp/$1.txt

n=`wc -l /tmp/$1.txt | awk '{print $1}'`

if [ $n -eq 0 ]

then

echo "There is no ip address on the eth."

else

echo "The ip address is :"

cat /tmp/$1.txt

fi

}

 

 

 

例32 列出目录内容

写一个脚本实现以下内容

1.脚本可以带参数也可以不带

2.参数可以有多个,每个参数必须是一个目录

3.脚本检查参数个数,若等于0,则列出当前目录本身,否则显示每个参数包含的子目录

要点

$#参数个数

test -d filename

 

 

 

#!/bin/bash

if [ $# -eq 0 ]

then

echo "当前目录下的文件是"

ls -l .

else

for d in $@

do

if [ -d $d ]

then

echo "目录下有这些子目录"

find $d type d

else

echo "并没有该目录:$d"

fi

done

 

fi

 

 

 

例33 下载文件

要求:定义一个shell函数,能够接受两个参数,满足以下要求:

1.第一个参数为URL,即可下载文件,第二个参数为目录,下载后保存的位置

2.如果用户给的目录不存在,则提示用户是否创建,如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本

3.如果用户目录存在,则下载文件,下载命令执行结束后测试文件下载成功与否,如果城功夫则返回0给调用脚本,否则,返回52给调用脚本

要点:$#参数个数是否为2

$2是否为目录

 

#!/bin/bash

if [ $# -ne 2 ]

then

echo "您必须要输入两个参数,第一个参数为网址,第二个参数为目录"

exit

fi

if [ ! -d $2 ]

then

echo "目录不存在,是否创建目录"

while :

do

case $c in

y|Y)

mkdir -p $2

;;

n|N)

exit 51

;;

*)

echo "请输入y或者n"

continue

;;

esac

done

 

else

cd $2

wget $1

if [ $? -eq 0]

then

exit 0

else

echo "下载失败"

fi

fi

 

例34

要求:写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个0-100的数字)一样时,直接退出,否则一直让用户输入,并且提示用户的数字比预设数字的大或者小

要点

$RANDOM可以生成一个随机数

随机数除以101取余则得0-100得随机数字

#!/bin/bash

n=$[$RANDOM%101]

while :

do

read -p "请输入一个数字:" n1

n2=`echo $n1|sed 's/[10-9]//g'`

if [ -z $n1 ]

then

echo "请输入一个数字"

continue

fi

if [ -n "$n2" ]

then

echo "你输入的数字不是正整数"

continue

else

if [ $n -gt $n1 ]

then

echo "你输入的数字小了,请重试"

continue

elif [ $n -lt $n1 ]

then

echo "你输入的数字大了,请重试"

continue

else

echo "恭喜你猜对了"

break

fi

fi

done

 

 

例35 根据名字得出数字

要求:执行脚本后,提示输入名字(英文的,可以使大小写字母,数字,不能有其他特殊符号)然后输出一个随机的0-99之间的数字,脚本并不会退出,继续提示让输名字

如果输入相同的名字,输出的数字还是第一次输入该名字输出的结果

前面已经输出过的数字,下次不能再出现

当输入q或者Q时,脚本会推出

要点:

判断名字的合法性[a-zA-Z0-9]

$RANDOM除以100取余得到0-99之间的随机数

 

#!/bin/bash

f=/tmp/user_name.txt

j_n()

{

while :

do

if awk '{print $2}' $f|grep -qw $1

then

continue

else

break

fi

done

}

while :

do

read -p "Please input a username :" u

if [ -z "$u" ]

then

echo "请输入用户名"

continue

if

if [ $u == "q" ] || [ $u == Q ]

then

exit

fi

u1=`echo $u | sed 's/[a-zA-Z0-9]'`

if [ -n "$u1" ]

then

echo "你输入的用户名不符合规范,正确的用户名应该是大小写字母和数字的组合"

continue

else

if [ -f $f ]

then

u_n=`awk -v uu=$u '$1=uu {print $2}' $f`

if [ -n "$u_n" ]

then

echo "用户$u对应的数字是: $u_n"

else

j_n

echo "用户$u对应的数字是:$n"

echo $u $n >> $f

fi

else

j_n

echo "用户$u对应的数字是:$n"

echo $u $n >> $f

fi

fi

 

done

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值