bash脚本练习(第2版)

1.求100以内所有偶数之和

#!/bin/bash

declare -i evensum=0
declare -i i=0

while [ $i -le 100 ];do
    let i++
    if [ $[$i%2] -eq 1 ];then
        continue
    fi
    evensum=$[$evensum+$i]
done

echo "$evensum"

2.求100以内所奇数之和

1 #/bin/bash
  2 
  3 declare -i oddsum=0
  4 declare -i i=1
  5 
  6 while true;do
  7     oddsum=$[$oddsum+$i]
  8     let i+=2
  9     if [ $i -gt 100 ];then
 10         break
 11     fi
 12 
 13 done
 14 
 15 echo "$oddsum"

3.每隔3秒钟到系统上获取已经登录用户的用户的信息;其中,如果logstash用户登录了系统,则记录于日志中,并退出;

第一种方法
1 #!/bin/bash
  2 
  3 while true;do
  4     if who | grep "^logstash\>" &> /dev/null;then
  5         echo "$(date +"%F %T") logstash logged" >> log.test
  6         break
  7     fi
  8     sleep 3
  9 done
第二种方法
1 #!/bin/bash
2 
3 until who | grep "^logstash\>" &> /dev/null;do
4     sleep 3
5 done
6 
7 echo "$(date "+%F %T")logstash logged" >> log.test

4.找出ID号为偶数的用户,显示其用户名、ID及默认shell

 1 #!/bin/bash
2 
3 while read test;do
4     userid=$(echo "$test" | cut -d":" -f3)
5     username=$(echo "$test" | cut -d":" -f1)
6     usershell=$(echo "$test" | cut -d":" -f7)
7     if [ $[$userid%2] -eq 0 ];then
8         echo "$username $userid $usershell"
9     fi
10 done < /etc/passwd
  1. 求100以内所有正整数之和
1 #!/bin/bash
2 declare -i sum=0
3 
4 for ((i=1;i<=100;i++));do
5     sum=$[$sum+$i]
6 done
7 
8 echo "$sum"

6.打印九九乘法表

1 #!/bin/bash
  2 
  3 for ((j=1;j<=9;j++));do
  4     for ((i=1;i<=j;i++));do
  5         echo -n -e "$i*$j=$[$i*$j]\t"
  6     done
  7     echo ""
  8 done

7.写一个服务框架脚本(case语句);
$lockfile, 值/var/lock/subsys/SCRIPT_NAME
(1) 此脚本可接受start, stop, restart, status四个参数之一;
(2) 如果参数非此四者,则提示使用帮助后退出;
(3) start,则创建lockfile,并显示启动;stop,则删除lockfile,并显示停止;restart,则先删除此文件再创建此文件,而后显示重启完成;status,如果lockfile存在,则显示running,否则,则显示为stopped.

1 #!/bin/bash
  2 #chkconfig: - 50 50
  3 #description:test service
  4 
  5 proc=$(basename $0)
  6 lockfile=/var/lock/subsys/$proc
  7 
  8 case $1 in
  9 start)
 10         if [ -f $lockfile ];then
 11             echo "$proc already running"
 12         else
 13             touch $lockfile
 14             [ $? -eq 0 ] && echo "$proc already start"
 15         fi
 16         ;;
 17         
 18 stop)
 19         if [ -f $lockfile ];then
 20             rm -rf $lockfile
 21             echo "the $proc service already stop"
 22         else
 23             echo "the $proc service stopped"
 24         fi
 25         ;;
 26 restart)
 27         if [ -f $lockfile ];then
 28             rm -rf $lockfile
 29             touch $lockfile
 30             echo "$proc restart already finished"
 31         else
 32             touch $lockfile
 33             echo "$proc start alreay finished"
 34         fi
 35         ;;
 36 status)
 37         if [ -e $lockfile  ];then
 38             echo "running" 
 39         else
 40             echo "stopped"
 41         fi ;;
 42 *)
 43         echo "Usage:must input {start|stop|restart|status}"
 44         exit 1 ;;
 45 esac

8.显示一个菜单给用户(case语句);
cpu) display cpu information
mem) display memory information
disk) display disks information
quit) quit

		要求:(1) 提示用户给出自己的选择;
			   (2) 正确的选择则给出相应的信息;否则,则提示重新选择正确的选项;
if语句
 1 #!/bin/bash
  2 
  3 cat << EOF
  4 cpu) display cpu infomation
  5 mem) display memory information
  6 disk) display disks information
  7 quit) quit
  8 EOF
  9 
 10 read -p "please inout you choice: " choice
 11 
 12 while [ "$choice" != "cpu" -a "$choice" != "mem" -a "$choice" != "disk" -a "$choice" != "quit" ];do
 13     echo "choice:{cpu|mem|disk|quit}"
 14     read -p "please inout you choice: " choice
 15 done
 16 
 17 if [ "$choice" == "cpu" ];then
 18     lscpu
 19 elif [ "$choice" == "mem" ];then
 20     free -h
 21 elif [ "$choice" == "disk" ];then
 22     fdisk -l /dev/sd[a-z]
 23 else
 24     echo "quit"
 25     exit 0
 26 fi
case语句
 #!/bin/bash
  2 
  3 cat << EOF
  4 cpu) display cpu infomation
  5 mem) display memory information
  6 disk) display disks information
  7 quit) quit
  8 EOF
  9 
 10 read -p "please inout you choice: " choice
 11 
 12 while [ "$choice" != "cpu" -a "$choice" != "mem" -a "$choice" != "disk" -a "$choice" != "quit" ];do
 13     echo "choice:{cpu|mem|disk|quit}"
 14     read -p "please inout you choice: " choice
 15 done
 16 
 17 case $choice in
 18 cpu)
 19         lscpu
 20         ;;
 21 mem)
 22         free -h
 23         ;;
 24 disk)
 25         fdisk -l /dev/sd[a-z]
 26         ;;
 27 *)
 28         echo "quit"
 29         exit 0
 30 esac

9.给定一个用户名,取得用户的id号和默认shell(函数方法)

1 #!/bin/bash
  2 
  3 idname() {
  4             if id "$username" &> /dev/null;then
  5                 grep "^$username\>" /etc/passwd | cut -d":" -f3,7
  6             fi
  7         }
  8 
  9 username=$1
 10 idname
 11 
 12 username=$2
 13 idname

10.使用函数方法更改之前的服务脚本框架

1 #!/bin/bash
  2 #chkconfig: - 50 50
  3 #description:test service
  4 
  5 proc=$(basename $0)
  6 lockfile=/var/lock/subsys/$proc
  7 
  8 start() {
  9         if [ -f $lockfile ];then
 10             echo "$proc already running"
 11         else
 12             touch $lockfile
 13             [ $? -eq 0 ] && echo "$proc already start"
 14         fi
 15 }
 16         
 17 stop() {
 18         if [ -f $lockfile ];then
 19             rm -rf $lockfile
 20             echo "the $proc service already stop"
 21         else
 22             echo "the $proc service stopped"
 23         fi
 24 }
 25 status() {
 26         if [ -e $lockfile  ];then
 27             echo "running"
 28         else
 29             echo "stopped"
 30         fi
 31  }
 32 usage() {
 33         echo "Usage:must input {start|stop|restart|status}"
 34         exit 1
 35 }
 36 
 37 case $1 in
 38 start)
 39         start
 40         ;;
 41 stop)
 42         stop
 43         ;;
 44 restart)
 45         stop
 46         start
 47         ;;
 48 status)
 49         status
 50         ;;
 51 *)
 52         usage
 53         exit 1
 54         ;;
 55 esac

11.添加10个用户,添加用户的功能使用函数实现,用户名做为参数传递给函数

#!/bin/bash
  2 
  3 usersum(){
  4         if id $1 &> /dev/null;then
  5             return 5
  6         else
  7             useradd $1
  8             number=$?
  9             return=$number
 10         fi
 11 }
 12 
 13 for i in {1..10};do
 14     usersum ${1}${i}
 15     number=$?
 16     if [ $number -eq 0 ];then
 17         echo "user ${1}${i} add finished"
 18     elif [ $number -eq 5 ];then
 19         echo "user ${1}${i} exists"
 20     else
 21         echo "Unknow"
 22     fi
 23 done

12.使用函数实现ping一个主机来测试主机的在线状态;主机地址通过参数传递给函数;主程序:测试192.168.3.1-192.168.3.20范围内各主机的在线状态;

1 #!/bin/bash
  2 
  3 pingstatus() {
  4             if ping -c 1 -w 1 $1 &>/dev/null;then
  5                 return 0
  6             else
  7                 return 2
  8             fi
  9 }
 10 
 11 for ((i=1;i<=20;i++));do
 12     host_ip=192.168.3.$i
 13     pingstatus $host_ip
 14     number=$?
 15     if [ $number -eq 0 ];then
 16         echo "the $host_ip host online"
 17         let up++
 18     elif [ $number -eq 2 ];then
 19         echo "the $host_ip host don't online"
 20         let down++
 21     fi
 22 done
 23 
 24 echo "Online sum is: $up"
 25 echo "Don't online is: $down"

13.打印NN乘法表;

第一种方法
1 #!/bin/bash
  2 
  3 NN() {
  4     for ((j=1;j<=$1;j++));do
  5         for ((i=1;i<=j;i++));do
  6             echo -n -e "$i*$j=$[$i*$j]\t"
  7         done
  8         echo " "
  9     done
 10 }
 11 
 12 NN $1
第二种方法
1 #!/bin/bash
  2 
  3 NN() {
  4         while [ $j -le $1 ];do
  5             while [ $i -le $j ];do
  6                 echo -e -n "$i*$j=$[$i*$j]\t"
  7                 let i++
  8             done
  9             i=1
 10             let j++
 11             echo " "
 12         done
 13         
 14 }
 15 
 16 
 17 
 18 declare -i j=1
 19 declare -i i=1
 20 
 21 NN $1

14.函数局部变量

1 #!/bin/bash
  2 
  3 name=tom
  4 
  5 setname() {
  6             echo "set before Shell:$name"
  7             local name=jerry
  8             echo "Function:$name"
  9 }
 10 
 11 setname
 12 echo "set after shell:$name"

15.函数递归

阶乘
  1 #!/binbash
  2 
  3 fact() {
  4         if [ $1 -eq 0 ];then
  5             echo "1"
  6         elif [ $1 -eq 1 ];then
  7             echo "1"
  8         else
  9             echo "$[$1*$(fact $[$1-1])]"
 10         fi
 11 }
 12 
 13 fact $1
斐波那契数列
 1 #!/bin/bash
  2 
  3 fab() {
  4         if [ $1 -eq 1 ];then
  5             echo -n "1 "
  6         elif [ $1 -eq 2 ];then
  7             echo -n "1 "
  8         else
  9             echo -n "$[$(fab $[$1-1])+$(fab $[$1-2])] "
 10         fi
 11 }
 12 
 13 for i in $(seq 1 $1);do
 14     fab $i
 15 done
 16 echo " "
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值