设为首页 加入收藏

TOP

bash脚本之for语句if语句以及各种测试语句
2014-11-24 03:08:18 来源: 作者: 【 】 浏览:1
Tags:bash 脚本 for 语句 及各种 测试

bash脚本编程


面向过程:


顺序执行


选择执行: if, case


循环执行: for, while, until


For循环


for 变量 in 列表; do


语句1;


语句2;


...


done



循环必须有退出条件;



单分支if语句:


if 条件; then


语句1


语句2


...


fi


单分支if语句例子


1:写一个脚本,实现如下功能:如果用户存在,就说明其存在;


#!/bin/bash


#


UserName=user1


if grep "^$UserName\>" /etc/passwd &> /dev/null; then


echo "$UserName exists."


fi


-------------------------------------------------------------


-------------------------------------------------------------


#!/bin/bash


UserName=user1


if id $UserName &> /dev/null; then


echo "$UserName exists."


fi


2:写一个脚本,实现如下功能:如果用存在,就显示其UIDSHELL


#!/bin/bash


#


UserName=user1


if id $UserName &> /dev/null; then


grep "^$UserName\>" /etc/passwd | cut -d: -f3,7


fi


3:写一个脚本,实现如下功能:如果设备/dev/sda3已经挂载,就显示其挂载点;


#!/bin/bash


#


Device='/dev/sda3'


if mount | grep "^$Device" &> /dev/null; then


mount | grep "/dev/sda3" | cut -d' ' -f3


fi


4:写一个脚本,实现如下功能:如果/etc/rc.d/rc.sysinit中有空白行,就显示其空白行数;


#!/bin/bash


#


File='/etc/rc.d/rc.sysinit'


if grep "^$" $File &> /dev/null; then


grep "^$" $File | wc -l


fi



双分支if语句:


if 条件; then


语句1


语句2


...


else


语句1


语句2


...


fi



练习:写一个脚本,实现如下功能:如果设备/dev/sda3已经挂载,就显示其挂载点;否则,就说明其未挂载或设备不存在;


#!/bin/bash


#


Device='/dev/sda3'


if mount | grep "^$Device" &> /dev/null; then


mount | grep "/dev/sda3" | cut -d' ' -f3


else


echo "$Device not mounted or not exist."


fi



多分支if语句:


语法格式:


if 条件1; then


语句1


语句2


...


elif 条件2; then


语句1


语句2


...


elif 条件3; then


语句1


语句2


...


else


语句1


语句2


...


fi



写一个脚本:


判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。


如果其生产商为GenuineIntel,就显示其为Intel公司;


如果其生产商为AuthenticAMD,就显示其为AMD公司;


否则,就显示无法识别;


#!/bin/bash


#


Vendor=`grep "vendor_id" /proc/cpuinfo | uniq | cut -d: -f2`


if [[ $Vendor =~ [[:space:]]*GenuineIntel$ ]]; then


echo "intel"


elif [[ $Vendor =~ [[:space:]]*AuthenticAMD$ ]]; then


echo "AMD"


else


echo "Unknown"


fi




bash条件测试:


可独立执行的命令不需使用如下测试的方式;


[ expression ] 括号内一般是需要测试的表达式 如:"$a" == "$b"


[[ expression ]]


test expression


bash命令有执行状态返回值;


bash的变量类型:


本地变量


局部变量


环境变量


位置变量


特殊变量:


$ : 用于保存刚刚执行的命令的状态返回值;


0:成功执行;


1-255:失败,1,2,127


可以使用exit命令在脚本中自定义脚本执行状态返回值;如果不定义,脚本执行状态返回值取决于脚本执行结束前最后执行的那个语句的状态;


$@, $*: 所有位置参数;


$#: 位置参数的个数;


bash整数测试:


expression: 数值1 比较符号 数值2


$A 比较符号 $B


大于:-gt


小于:-lt


等于:-eq


大等:-ge


小等:-le


不等:-ne


命令执行状态返回值: 0-255


0: 正确执行


1-255: 错误执行


exit [n] 脚本执行的最后一条件命令的状态返回值;


1:写一个脚本,生成两个随机数,比较其大小;显示大数;


bash有个内置变量:$RANDOM


$RANDOM 显示随机数


#!/bin/bash


#


A=$RANDOM


B=$RANDOM


if [ $A -ge $B ]; then


echo "Max number is $A."


else


echo "Max number is $B."


fi


2:写一脚本,随机生成一个整数,判定,显示其奇偶性;


#!/bin/bash


#


A=$RANDOM


if [ $[$A%2] -eq 0 ]; then


echo "$A: Even"


else


echo "$A: Odd"


fi


3:给定一个用户,如果其ID号大于499,就说明其是普通用户,否则,就说明其是管理员或系统用户;


#!/bin/bash


#


UserName=daemon


Uid=`id -u $UserName`


if [ $Uid -gt 499 ]; then


echo "A common user: $UserName."


else


echo "admin user or system user: $UserName."


fi


4:求200以内所有为3的整数倍的整数之和;


#!/bin/bash


#


Sum=0


for I in {1..200}; do


if [ $[$I%3] -eq 0 ]; then


Sum=$[$Sum+$I]


fi


done


echo "Sum: $Sum."


5:给定一个用户,如果其UID等于GID,就说明这是个“good guy”,否则,“Bad guy.


#!/bin/bash


#


UserName=user1


if [ `id -u $UserName` -eq `id -g $UserName` ]; then


echo "Good Guy."


else


echo "Bad Guy."


fi


6写一个脚本:计算100以内所有奇数的和以及所有偶数的和;分别显示之;


#!/bin/bash


#


EvenSum=0


OddSum=0


for I in {1..100}; do


if [ $[$I%2] -eq 0 ]; then


EvenSum=$[$EvenSum+$I]


else


OddSum=$[$OddSum+$I]


fi


done


echo "EvenSum is: $EvenSum. OddSum is: $OddSum."


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++成员函数的存储方式 下一篇采用Python来访问Hadoop HSFS存储..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)