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 #!/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 " "