单分支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> echo "$UserName exists."
fi
练习:写一个脚本,实现如下功能:
如果用存在,就显示其UID和SHELL;
#!/bin/bash
#
UserName=user1
if> 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> 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> echo "$UserName exists."
else
useradd $UserName
echo "Add $UserName successfully."
Count=$[$Count+1]
fi
done
echo "Add $Count new users."
练习,写一个脚本,完成以下要求:
给定一个用户:
1、如果其UID为0,就显示此为管理员;
2、否则,就显示其为普通用户;
练习:写一个脚本,完成以下要求:
通过参数传递一个磁盘设备文件给脚本,让脚本来判断其是否有扩展分区;有则显示有,否则显示为无;
练习:写一个脚本
给定一个文件,比如/etc/inittab
判断这个文件中是否有空白行;
如果有,则显示其空白行数;否则,显示没有空白行。
练习:写一个脚本;(要求:不使用id命令获得其id号;)
给定一个用户,判断其UID与GID是否一样
如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”。
练习:写一个脚本
给脚本传递两个参数(整数);
显示此两者之和,之乘积;
写一个脚本,分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。显示结果形如:
BASH,3users,they are:
root,redhat,gentoo
NOLOGIN, 2users, they are:
bin,ftp
bash脚本知识点:
条件测试方式:
bash命令;
[ expression ]
` expression `
test expression
条件测试:
整数测试
大于:-gt
小于:-lt
等于:-eq
大等:-ge
小等:-le
不等:-ne
字符测试
文件测试
命令执行状态返回值: 0-255
0: 正确执行
1-255: 错误执行
exit [n]
脚本执行的最后一条件命令的状态返回值;
bash字符测试:
>: 大于
如果其生产商为GenuineIntel,就显示其为Intel公司;
否则,就显示其为AMD公司;
#!/bin/bash
#
Vendor=`grep "vendor_id" /proc/cpuinfo | uniq | cut -d: -f2`
if [[ "$Vendor" =~ [[:space:]]*GenuineIntel$ ]]; then
echo "Intel"
else
echo "AMD"
fi
练习:写一个脚本
通过参数传递一个字符串给脚本,如果传递的字符串为“memory”或“Memory”,就以MB为单位显示当前主机的内存信息;
否则,就显示/proc/uptime文件的内容。
#!/bin/bash
#
if [[ $1 =~ [Mm]emory$ ]]; then
free -m
else
cat /proc/uptime
fi
bash知识点:组合条件测试
-a: 与
-o: 或
!: 非,单目操作符
A=3
UID>=1, UID echo "No such user."
exit 6
fi
if [ `id -u $1` -eq `id -g $1` ]; then
echo "Good Guy"
else
echo "Bad Guy"
fi
练习:写一个脚本
通过参数传递一个字符串给脚本,如果传递的字符串为“memory”或“Memory”,就以MB为单位显示当前主机的内存信息;
否则,就显示/proc/uptime文件的内容。
[ $1 == "memory" -o $1 == "Memory" ]
bash条件判断之多分支if语句:
语法格式:
if 条件1; then
语句1
语句2
...
elif 条件2; then
语句1
语句2
...
elif 条件3; then
语句1
语句2
...
else
语句1
语句2
...
fi
写一个脚本: