单分支if语句:

if 条件; then

语句1

语句2

...

fi



if 条件

then

例子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

练习:写一个脚本,实现如下功能:

如果用存在,就显示其UID和SHELL;

#!/bin/bash

#

UserName=user1

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

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

fi

练习:写一个脚本,实现如下功能:

如果设备/dev/sda3已经挂载,就显示其挂载点;

#!/bin/bash

#

Device='/dev/sda3'


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

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

fi

练习:写一个脚本,实现如下功能:

如果/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

例子:写一个脚本:

如果指定的用户存,先说明其已经存在,并显示其ID号和SHELL;否则,就添加用户,并显示其ID号;


练习:写一个脚本,实现如下功能:

如果设备/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



bash条件测试:

[ expression ]

[[ expression ]]

test expression


整数测试

字符测试

文件测试


整数测试:

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

$A 比较符号 $B

大于:-gt, 例如 $A -gt $B

大于或等于:-ge

等于:-eq

小于:-lt

小于或等于:-le

不等于:-ne

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

bash有个内置变量:$RANDOM


#!/bin/bash

#

A=$RANDOM

B=$RANDOM


if [ $A -ge $B ]; then

echo "Max number is $A."

else

echo "Max number is $B."

fi

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

#!/bin/bash

#

A=$RANDOM


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

echo "$A: Even"

else

echo "$A: Odd"

fi

练习:给定一个用户,如果其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

练习:求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."

练习:给定一个用户,如果其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

写一个脚本:

计算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."




bash编程: 位置变量

$1, $2, $3, $4, ...

写一个脚本:

计算N以内所有奇数的和以及所有偶数的和;分别显示之;N是通过参数传递过来的正整数;


#!/bin/bash

#

EvenSum=0

OddSum=0


for I in `seq 1 $1`;do

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

OddSum=$[$OddSum+$I]

else

EvenSum=$[$EvenSum+$I]

fi

done


echo "EvenSum: $EvenSum."

echo "OddSUm: $OddSum."


echo "Sum: $[$EvenSum+$OddSum]"

shift [n]:实现位置参数轮替;

例子:通过参数传递n个正整数给脚本,求其和;

#!/bin/bash

#

Sum=0

for I in `seq 1 $#`; do

Sum=$[$Sum+$1]

shift

done


echo $Sum

练习,写一个脚本,完成以下要求:

1、添加10个用户user1, user2, ..., user10;但要先判断用户是否存在,不存在而后再添加;

2、添加完成后,显示一共添加了几个用户;当然,不能包括因为事先存在而没有添加的;

3、最后显示当前系统上共有多少个用户;

#!/bin/bash

#

Count=0


for I in {1..10}; do

if id user$I &> /dev/null; then

echo "user$I exists."

else

useradd user$I

echo "Add user$I successfully."

Count=$[$Count+1]

fi

done


echo "Add $Count new users."

echo "Total users: `wc -l /etc/passwd | cut -d' ' -f1`."

练习,写一个脚本,完成以下要求:

1、通过参数传递一系列用户名给脚本,让脚本添加这些用户;但要先判断用户是否存在,不存在而后再添加;

2、添加完成后,显示一共添加了几个用户;当然,不能包括因为事先存在而没有添加的;

#!/bin/bash

#

Count=0


for UserName in $@; do

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

echo "$UserName exists."

else

useradd $UserName

echo "Add $UserName successfully."

Count=$[$Count+1]

fi

done


echo "Add $Count new users."


blog comments powered by Disqus

Published

31 October 2013

Tags