天天看点

linux shell脚本练习题(2)

1.编写shell脚本,计算1~100的和。

要求 使用while 和 for 循环分别实现

for循环:

#!/bin/bash
		sum=0
		for ((i=1; i<=100; i++));
		{
      	 		sum=`expr $i + $sum`;
		}
		echo $sum
           

while循环:

#!/bin/bash
		i=1      
		SUM=0     
		while [ "$i" -le 100 ]  
		do      
		    SUM=`expr $i + $SUM`;
		#     ((i++))
		#     i=$(($i+1))            
		      i=`expr $i + 1`;
		done
		echo $SUM
           

2.编写shell脚本,输入一个数字n并计算1~n的和。

要求 使用while 和 for 循环分别实现

for循环:

#!/bin/bash 
			read -p "input a number:" number
			sum=0
			for i in `seq $number`
			do
			        sum=$((sum+i))
			        i=$((i+1))
			done
			echo "1+...+$number:$sum"
           

while循环:

#!/bin/bash
			n=0
			while [ $n -lt "1" ]; 
			do
			    read -p "input a number:" n
			done
			sum=0
			for i in `seq 1 $n`; 
			do
			    sum=$[$i+$sum]
			done
			echo $sum
           

3.编写shell脚本,批量建立用户

要求:所有用户同属于users组

#!/bin/bash
			groupadd users
			for i in `seq -w 0 9
			        uesradd -g users user_0$i4
			done
			
           

4.编写shell脚本,要求实现如下功能:

(1) 当执行一个程序的时候,这个程序会让使用者选择boy或者girl;

(2) 如果使用者输入b时,就显示:He is a boy;

(3) 如果使用者输入g时,就显示:He is a girl;

(4) 如果是除了b/g以外的其他字符,就显示:I don’t know

#!/bin/bash
			echo -n your choice:
			read choice
			case $choice in
			g)echo "She is a girl.";;
			G)echo "She is a girl.";;
			b)echo "He is a boy.";;
			B)echo "He is a boy.";;
			*)echo "I don't know.";;
			esac
           

5.编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下

#!/bin/bash
			for Filename in $(ls -l |awk '$5 > 10240 {print $9}')
			do
			mv $Filename /tmp
			done
			ls -la /tmp
			echo "Done!"
           

6.编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写

#!/bin/bash
		if [ -e $1 ]
		then
		[  ! -r $1 -a   ! -w $1  ] && echo "The file is not write and not red" || echo "The file can read or write"
		else
	    echo "The file isn't exist"
		fi
           

7.编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件

#!/bin/bash
			[ -f $1 -a $(echo $1 | grep ".*\.sh") ] && chmod 755 $1;echo "yesyes" || echo " isn't a script"
           

8.编写shell脚本,实现1-100的猜数字游戏

#!/bin/bash
			echo '可以输入q或者quit退出'
			a=$[RANDOM%100+1]
			while :; do
			     read -p '请输入一个数字(1-100):' num
			     i=`echo $num | sed 's/[0-9]//g'`
			        if [ -z "$num" ];then
			                echo '不能什么都不输入'
			                continue
			        fi
			                if [ $num == q ] || [ $num == quit ];then
			                        exit 2
			                fi
			                                if [ ! -z "$i" ];then
			                                        echo '你输入的不是数字'
			                                        continue
			                                fi
			                if [ $num -lt 1 ] || [ $num -gt 100 ];then
			                        echo '你输入的数字不再1-100内'
			                        continue
			                fi
			        if [ $num -lt $a ];then
			                echo '猜错了,太小了'
			        elif [ $num -gt $a ];then
			                echo '猜错了,太大了'
			        else
			                echo '恭喜你,猜对了'
			                read -p '还想再来一局吗,请输入yes或者no:' ab
			                        case $ab in
			                                yes)
			                                continue
			                        ;;
			                                no)
			                                exit
			                        ;;
			                                *)
			                                break
			                        ;;
			                        esac
			
			        fi
			done
			echo '你有输入正确选择,默认退出'
           

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

#!/bin/bash
			for file in /var/*
			do
			    if [ -f "$file" ]
			    then
			        if [ -s "$file" ] 
			        then
			            printf "File:$file\n"
			            cat "$file"
			        else 
			            rm "$file"
			        fi
			    else [ -d "$file" ]
			        printf "Directory:$file\n"
			        ls "$file"
			    fi
			    printf "\n\n\n"
			done
           

继续阅读