当前位置:  操作系统/服务器>linux

bash 编程中循环语句用法

    来源: 互联网  发布时间:2014-10-13

    本文导语:  1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; then statement …. else statement …. fi 3.if …elif…elif…else 是多分支语句,使用格式如下: if condition ; then state...

1.if 是单分支语句,使用格式如下:
if condition ; then
statement
…..
fi
2.if … else 是双分支语句,使用格式如下:
if condition ; then
statement
….
else
statement
….
fi
3.if …elif…elif…else 是多分支语句,使用格式如下:
if condition ; then
statement
….
elif condition ; then
statement
…..
elif condition ; then
statement
…..
.
.
.
else
statement
….
fi
4.while 语句是循环语句,当条件满足的情况下才循环,不满足则退出循环,使用格式如下:
while condition ; do
statement
…..
done
5.until 语句也是循环语句,当条件不满足的情况下循环,满足则不循环,使用格式如下:
until condition ; do
statement
…..
done
6.case 也是循环语句,使用格式如下:
case $var(变量) ; in
value1)
……

value2)
…..

*)

..
..
..
esac

脚本练习:

1.计算100以内所有能被3整除的正整数的和。
代码如下:

#!/bin/bash
declare -i sum=0
for I in {1..100}; do
if [ $[$I%3] -eq 0 ]; then
let sum+=$I
fi
done
echo " the sum is :$sum"

2.计算100以内所有奇数的和以及所有偶数的和
代码如下:

#!/bin/bash
# echo "exercise"
declare -i sum1=0
declare -i sum2=0
for I in {1..100}; do
if [ $[$I%2] -eq 0 ]; then
let sum1+=$I
else
let sum2+=$I
fi
done
echo " the even sum is :$sum1"
echo " the oddnumber sum is :$sum2"

3.判断/var/log下的文件的类型:
如果是普通文件,则说明其为普通文件;
如果是目录文件,则说明其为目录文件;
如果是符号链接文件,则说明其为符号链接文件;
否则,说明文件类型无法识别;
代码如下:

#!/bin/bash
file1=/var/log/*
for file in $file1 ; do
if [ -f $file ]; then
echo "$file is common file"
elif [ -d $file ]; then
echo "$file is directory file"
else
echo "$file is unknow"
fi
done

4.写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为
/sbin/nologin的用户
并统计各类shell下的用户总数,显示结果形如:bash,3user,they
are:root,redhat,gentoo nologn,2user,they are:bin,ftp
代码如下:

#!/bin/bash
file=/etc/passwd
bsh='/bin/bash'
nobsh='/sbin/nologin'
use=`cat $file | cut -d: -f1`
declare -i d1=0
declare -i d2=0
for I in $use ; do
s=`grep "^$I:" $file | cut -d: -f7`
if [ "$s" = $bsh ] ; then
let d1=$d1+1
muser=$I,$muser
elif [ "$s" = $nobsh ] ; then
let d2=$d2+1
suser=$I,$suser
fi
done
echo "BASH,$d1 users ,they are:"
echo $muser
echo
echo "NOLOGIN,$d2 users ,they are:"
echo $suser

5.写一个脚本:
(1)如果不存在,就创建文件/tmp/maintenance;如果存在,就事先删除
(2)在文件/tmp/maintenance中添加如下内容:
172.16.0.6
172.16.0.17
172.16.0.20
(3)测试172.16.0.0/16网络内的所有主机是否在线,如果在线就显示其在线,如果此主机
在/tmp/maintenance文件中,就显示其正处于维护状态;否则,就显示其状态未知;
代码如下:

#!/bin/bash
file=/tmp/maintenace
if [ -e $file ]; then
rm -rf $file &> /dev/null
fi
touch $file
cat >> $file /dev/null ; then
echo "$bnet.$net.$host is up."
elif grep "$bnet.$net.$host$" $file &> /dev/null ;then
echo "$bnet.$net.$host is under maintenance."
else
echo "$bnet.$net.$host state is unknow."
fi
done
done

6写一个脚本,完成以下功能:
(1)、提示用户输入一个用户名;
(2)、显示一个菜单给用户,形如:
U|u show UID
G|g show GID
S|s show SHELL
Q|q quit
(3)、提醒用户选择一个选项,并显示其所选择的内容;如果用户给的是一个非上述所提示的选项,则提醒用户给出的选项错误,并请其重新选择后执行;
第一种方法:
代码如下:

#!/bin/bash
read -p "Enter a user name:" username
! id $username &> /dev/null && echo " Come on ,the user you input unexit" && exit 9
cat /dev/null && echo "Come on ,you input user notexit" && exit 9
cat /dev/null ; do
read -p " Q|q to quit .others to edit:" opt
case $opt in
Q|q)
echo "quit..."
exit 3

*)
vim $1

esac
done

第二种方法:
代码如下:

#!/bin/bash
[ ! -f $1 ] && echo "wrong path." && echo "Quit!" && exit 9
until bash -n $1 &> /dev/null ; do
read -p " Grammar wrong please enter Q|q to quit .others to edit:" opt
case $opt in
Q|q)
echo "quit..."
exit 3

*)
vim $1
bash -n $1 &> /dev/null
val=$?
[ "$val" -ne 0 ] && echo "xiu gai bu cheng gong. "

esac
done

第三种方法
代码如下:

#!/bin/bash
[ ! -f $1 ] && echo "Wrong scripts." && exit 4
bash -n $1 &> /dev/null
valu=$?
until [ $valu -eq 0 ] ; do
read -p "Q|q to quit ,others to edit:" op
case $op in
Q|q)
echo "Quit."
exit 9

*)
vim $1
bash -n $1 &> /dev/null
valu=$?

esac
done

8 写一个脚本:
查看redhat用户是否登录了系统,如果登录了,就通知当前脚本执行者“redhat
is logged on.”;否则,就睡眠5秒钟后再次进行测试;直到其登录为止退出;
第一种方法
代码如下:

#!/bin/bash
who | grep "^redhat>" &> /dev/null
reval=$?
until [ $reval -eq 0 ] ;do
sleep 5
who | grep "^redhat>" &> /dev/null
reval=$?
done
echo "redhat is logged on."

第二种方法:
代码如下:

#!/bin/bash
until who | grep "^redhat>" &> /dev/null ; do
sleep 5
done
echo "redhat is logged on"

9写一个脚本:
(1)、向系统中添加20个用户,名字为linuxer1-linuxer20,密码分别为其用户名,要使用while循环;
(2)、要求:在添加每个用户之前事先判断用户是否存在,如果已经存在,则不再添加此用户;
(3)、添加完成后,显示linuxer1-linuxer20每个用户名及对应的UID号码和GID号码,形如 stu1, UID: 1000, GID: 1000
代码如下:

#!/bin/bash
declare -i I=1
while [ $I -le 20 ] ; do
l=linuxer$I
let I++
! id $l &> /dev/null && useradd $l &> /dev/null && echo "the user:$l" | passwd --stdin $l &> /dev/null && echo "a dd user $l successfully" || echo " The user $l is exit. "
d=`id -u $l`
g=`id -g $l`
echo " $l ,UID:$d,GID:$g "
done

本文出自 “知识体系” 博客

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Bash的For循环(根据每次递增的数)
  • bash脚本的问题,为何循环体中不能修改变量的值?
  • bash的for循环输入重定向问题
  • bash 循环中变量作用范围的问题分析
  • bash脚本下,循环只执行一次就退出
  • linux bash shell命令:grep文本搜索工具简介
  • . ./.bash_file 与 ./.bash_file的区别?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 为什么每次启动bash都出现bash:test:a:binary operaotr expected
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • linux RHEL 5.6 在root用户下. .bash_profile 或source .bash_profile 报错
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • Ubuntu中如何配置shell(bash)的环境
  • 如何在ubunt下面安装两个bash
  • bash 不能使用括号,求助
  • 如何在redhat下安装bash?
  • bash和Korn shell学哪个比较好
  • 请问root的bash的环境变量放在哪个文件中啊?
  • linux(redhat9)中在哪里设环境变量,.bash_profil在哪里啊?
  • BASH Debugger
  • .bashrc和.bash_profile有什么区别
  • . /root/.bash_profile
  • Bash架构问题
  • bash的控制终端
  • bash 与shell 什么关系?
  • -bash-3.2# Argument list too long 到底是怎么回事呀?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3