shell编程循环语法作业

判断/var/目录下所有文件的类型

[root@www sh.log]# cat typefile.sh 
#!/bin/bash
#author:DYW
#显示目录下文件类型
if [ $# -lt 1 ];then
	echo "Please enter a directory"
	exit
fi
#=================================
if [ ! -d $1 ];then
	echo "$1 is not a directory or No such directory"
	exit
fi
#=================================
dirname=`echo $1 | sed -r 's@(.*)/$@\1@'`

for w in `ls -A $1` ;do
	filetype=`ls -dl  $dirname/$w |cut -c1`
	case $filetype in
	d)
		echo "$dirname/$w is a directory"
	;;
    -)
        echo "$dirname/$w is a common file"
    ;;
    l)
        echo "$dirname/$w is a link file"
    ;;
    p)
        echo "$dirname/$w is a pipe file"
    ;;
    b)
        echo "$dirname/$w is a block file"
    ;;
    c)
        echo "$dirname/$w is a character file"
    ;;
    s)
        echo "$dirname/$w is a socket file"
    ;;
    *)
        echo "$dirname/$w is a unknown file"
    ;;
	esac
done
[root@www sh.log]# bash typefile.sh /etc/
/etc/adjtime is a common file
/etc/aliases is a common file
/etc/aliases.db is a common file
/etc/alternatives is a directory
/etc/anacrontab is a common file
/etc/asound.conf is a common file
....

添加10个用户user1-user10,密码同用户名

[root@www sh.log]# cat adduser1-10.sh 
#!/bin/bash
#author:DYW
#添加uesr1-user10,用户密码相同
if [ $# -lt 1 ];then
 	echo -e "please add a option\n\t-a\tadd\tuser1-user10\n\t-d\tdel\tuser1-user10"
	exit
fi

for w in `seq 10`;do
	case $1 in
		-a)
			if id user$w &> /dev/null;then
				echo "user$w"|passwd --stdin "user$w" &> /dev/null
				echo "user$w already existed!"
			else
				useradd user$w &> /dev/null
				echo "user$w"|passwd --stdin "user$w" &> /dev/null
				echo "user$w add complete"
			fi
		;;
		-d)
			if id user$w &> /dev/null;then
				userdel -r user$w 
				echo "user$w del complete"
			else 
				echo "No such user$w"
			fi
		;;
		*)
			echo -e "Unknow option,please enter'-a'or'-d'"
			exit
	esac
done

[root@www sh.log]# bash adduser1-10.sh -a
user1 add complete
user2 add complete
user3 add complete
user4 add complete
user5 add complete
user6 add complete
user7 add complete
user8 add complete
user9 add complete
user10 add complete
[root@www sh.log]# bash adduser1-10.sh -d
user1 del complete
user2 del complete
user3 del complete
user4 del complete
user5 del complete
user6 del complete
user7 del complete
user8 del complete
user9 del complete
user10 del complete
[root@www sh.log]# bash adduser1-10.sh -q
Unknow option,please enter'-a'or'-d'

/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start;

“ K34filename stop”

“S66filename start”

[root@www sh.log]# cat KSfile.sh 
#!/bin/bash
#author:DYW
#/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的我文件,分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start。
for w in `ls /etc/rc.d/rc3.d/`;do
	filename=`echo "$w"|cut -c1`
	case $filename in
	K)
		echo -e "$w\tstop"
	;;
	S)
		echo -e "$w\tstart"
	;;
	*)
		echo "Unknow file"
	;;
	esac
done
[root@www sh.log]# bash KSfile.sh 
K50netconsole	stop
S10network	start

写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和

[root@www sh.log]# cat sumfora-b.sh 
#!/bin/bash
read -p "input s number please:" number
num=`echo "$number"|grep "^[[:digit:]]\+$"`
if echo $number | grep -q "^[[:digit:]]\+$" ;then
	if [ $num -eq 0 ];then
	echo "Please enter a number more than 0"
	exit
	fi
else
	echo "This is a negative number"
	exit
fi
string=0
for N in `seq $number`;do
	sum=$[$sum+$N]
	string=$string+$N
done
	echo "$string=$sum"

[root@www sh.log]# bash sumfora-b.sh 
input s number please:10
0+1+2+3+4+5+6+7+8+9+10=55
[root@www sh.log]# bash sumfora-b.sh 
input s number please:0
Please enter a number more than 0
[root@www sh.log]# bash sumfora-b.sh 
input s number please:-10
This is a negative number

写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态

[root@www sh.log]# cat  Online.sh 
#!/bin/bash
#author:DYW
#写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态
read -p "please input a ip:" ip
segment=`echo "$ip"|cut -d. -f1-3`.

if echo "$ip" |egrep '\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>' &>/dev/null;then
	for w in `seq 10`;do
		if ping -c1 -W1 $segment$w &> /dev/null;then
			echo -e "$segment$w\tonline"
		else
			echo -e "$segment$w\tnot online"
		fi
	done
else
	echo "$ip is invaild"
fi
[root@www sh.log]# bash Online.sh 
please input a ip:a.a.a.a
a.a.a.a is invaild
[root@www sh.log]# bash Online.sh 
please input a ip:192.168.1.0
192.168.1.1	online
192.168.1.2	not online
192.168.1.3	not online
192.168.1.4	not online
192.168.1.5	not online
192.168.1.6	not online
192.168.1.7	not online
192.168.1.8	not online
192.168.1.9	not online
192.168.1.10	not online

打印九九乘法表

[root@www sh.log]# cat 99.sh 
#!/bin/bash
#author:DYW
#打印九九乘法表
for h in `seq 9`;do
	for s in `seq $h`;do
		echo -ne "$h*$s=$[$h*$s]\t"
	done
	echo
done
[root@www sh.log]# bash 99.sh 
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

求100以内所有正整数之和

[root@www sh.log]# cat while100.sh 
#!/bin/bash
#author:DYW
#求100以内数字的合
laowang=1
sum=0
while [ $laowang -le 100 ];do
	sum=$[$laowang + $sum]
	let laowang++
done
echo "$sum"
[root@www sh.log]# bash while100.sh 
5050

通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。

[root@localhost sh.log]# cat whileonline.sh 
#!/bin/bash
#author:DYW
#通过ping命令探测网段范围内的所有主机的在线状态,统计在线主机和离线主机各多少
read -p "please input a ip:" ip
segment=`echo "$ip"|cut -d. -f1-3`.
a=0
b=0
c=0
while [ $a -le 255 ];do
	ping -c1 -W1 $segment$a &> /dev/null
	if [ $? -eq 0 ];then
		echo "$segment$a is active"
		
		let b++
	else
		echo "$segment$a is inactive"
		let c++
	fi
	let a++
done
[root@localhost sh.log]# bash whileonline.sh 
please input a ip:192.168.1.1
192.168.1.0 is inactive
192.168.1.1 is active
192.168.1.2 is inactive
192.168.1.3 is inactive
192.168.1.4 is inactive
...

打印九九乘法表

[root@www sh.log]# cat while99.sh 
#!/bin/bash
#author:DYW
#打印九九乘法表
h=1
while [ $h -le 9 ];do
	s=1
	while [ $s -le $h ];do
		echo -ne "$h*$s=$[$h*$s]\t"
		let s++
	done
	echo
	let h++
done
[root@www sh.log]# bash while99.sh
1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者

[root@localhost sh.log]# cat whileRANDOM.sh 
#!/bin/bash
#author:DYW
#利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者
a=1
s=$RANDOM
max=$s
min=$s
while [ $a -le 10 ]
do
	[ $max -lt $s ] && max=$s
	[ $min -gt $s ] && min=$s
	echo "$s"
	s=$RANDOM
	let a++
done
echo "最大值$max"
echo "最小值$min"

[root@localhost sh.log]# bash whileRANDOM.sh 
11809
31992
7297
30427
16659
1443
14497
3661
28410
6132
最大值31992
最小值1443

打印国际象棋棋盘

[root@localhost sh.log]# cat whilexiangqi.sh 
#!/bon/bash
#author:DYW
#打印国际象棋棋盘
a=1
while [ $a -le 8 ];do
	b=1
	while [ $b -le 8 ];do
		sum=`expr $a + $b`
		c=`expr $sum % 2`
		[ $c -eq 0 ] && echo -ne "\033[41;1m  \033[0m"||echo -ne "\033[43;1m  \033[0m"
		let b++
	done
	echo
	let a++
done
[root@localhost sh.log]# bash whilexiangqi.sh

每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。

[root@localhost sh.log]# cat untiluser.sh 
#!/bin/bash
#author:DYW
#每隔3秒钟到系统上获取已经登录的用户的信息,如果发现用户hacker登录,则将登录时间和主机记录在日志/var/log/login.log中,并提示该用户退出系统
until who|grep -q "^hacker\>" ;do
	sleep 3
done
who|grep "^hacker"|tr -s " "|cut -d" " -f3,5 >> /var/log/login.log
echo "you should logout system" | mail hacker
echo "reminded and login record in /var/log/login.log"

随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出。

[root@localhost sh.log]# cat untilcai.sh 
#!/bin/bash
#author:DYW
#随机生成10以内的数字,实现猜字游戏,提示比较大或者小,相等则退出
read -p "please input a number:" num
random=$[$RANDOM%10+1]
until [ $random -eq $num ];do
	if [ $random -lt $num ];then
		echo "大了,重猜!"
		read -p "please input a number:" num
	elif [ $random -gt $num ];then
		echo "小了,重猜!"
		read -p "plesae input a number:" num
	fi
done
echo "你猜中了!"
[root@localhost sh.log]# bash untilcai.sh 
please input a number:1
小了,重猜!
plesae input a number:2
小了,重猜!
plesae input a number:3
小了,重猜!
plesae input a number:4
小了,重猜!
plesae input a number:5
小了,重猜!
plesae input a number:6
小了,重猜!
plesae input a number:7
小了,重猜!
plesae input a number:8
小了,重猜!
plesae input a number:9
小了,重猜!
plesae input a number:10
你猜中了!

原创文章,作者:DYW,如若转载,请注明出处:http://www.178linux.com/37289

(0)
DYWDYW
上一篇 2016-08-21
下一篇 2016-08-21

相关推荐

  • 软链接与硬链接的区别

      这两牵扯到链接,那么先介绍以下链接。   在文件系统中,有一种可以把不同的文件相连接到一起的机制,这个机制叫做链接。通俗的话来说就是打开两个不同的文件夹,其实进去的是同一个。它可以把一个文件用不同的名字和路径来表示出来。系统通过inode(索引节点,文件唯一标识)来识别是否为同一个文件,无论系统上有有多少个链接,在磁盘上只有一个唯一的…

    2017-05-25
  • 第六周

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; :%s/^[[:space:]]\+/#&/ 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; :%s/^[[:space:]]\…

    Linux干货 2016-09-19
  • 三剑客之Sed

    sed:stream editor(流编辑器) 工作特性:并不直接处理文本文件本身,处理机制为每当处理一个文件的时候,它会逐行读取,每次把一行读取到内存空间中去,而后在模式空间(pattern space)中完成编辑.并把编辑好的结果输出到屏幕上  功      能:数据替换、删除、增加、等,数据为关键字或者一整行, …

    Linux干货 2016-08-08
  • N26-第一周博客作业

    1.描述计算机的组成及其功能 完整的计算机系统由硬件和软件两部分组成。 现在大部分的计算机为冯诺依曼体系,主要有五个组成部分:运算器、控制器、存储器、输入设备、输出设备,以下为详细描述。(计算机的CPU由运算器、控制器和一二三层缓存等构成) 运算器:对数据进行算术运算和逻辑运算(对数据进行加工处理) 控制器:分析指令,控制协调输入、输出操作对内存的访问。 存…

    Linux干货 2017-01-02
  • CentOS6 网络管理之网卡配置及简单路由设置

    CentOS6中关于网络配置的命令有很多,本文将介绍几个平时最长用的几个命令,以及网卡IP地址的配置和简单路由配置。 1、经常使用的查看IP地址命令为 ifconfig,不跟参数的情况下默认查看所有已启用的网卡信息,如下图所示: 如果想查看具体某块网卡信息,则可以在ifconfig后面跟上网卡设备,如只查看eth0的信息则执行:ifconfig eht0 即…

    Linux干货 2016-09-05
  • 学习笔记–权限管理

    文件系统的权限管理 1、Linux系统下每个目录或文件的权限对象主要分为:属主(u)、属组(g)、其他用户(o),针对每类访问对象都定义了三种权限:读(r)、写(w)、执行(x),这三种权限针对目录和文件的作用各不相同,以下将做详细说明: 对于文件来说: 读(r)权限:可以使用文本查看类工具读取文件内容 写(w)权限:可以修改文件内容,但不能删除文件本身 执…

    Linux干货 2016-08-05

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-22 13:36

    作业完成的很好,每一天都很经典,也是笔试中常见的考点,希望写完之后能通过文字记录下自己的思路,这样对自己来说是一笔可贵的经验哦。