字符测试:
==:测试是否相等,相等为真,否则为假
!=:测试是否不等,不等为真,否则为假
>或<:将字符串转化为ASCll值然后比较其大小
-n:判断字符是否为空,空为真,不空为假
-z:判断字符是否为不空,不空为真,空则为假
bash循环结构:必须有进入条件和退出条件
while
until
for:
for 变量 in 列表;do
循环体;
done
如何生成列表?
{1..100}
`seq [起始数 [步进长度] ] 结束数`
declare 声明变量
-i 声明为整型
-x 声明为环境变量
练习:
传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。
#!/bin/bash
if [ $# -lt 1 ];then
echo "Usage `basename $0` ARG ..."
exit 7
fi
if ! id $1 &>/dev/null ;then
echo "User $1 not exists!"
elif [ $1 == `id -n -g $1` ];then
echo "$1's user and grop are the same"
else
echo "$1's user and grop not the same!"
fi
练习:
传递3个参数给脚本,第一个为整数,第二个为算数运算符,第三个为整数,将计算结果显示出来,并保留两位精度。
#!/bin/bash
if [ $# -ne 3 ];then
echo "Usage: `basename $0` ARG OPT ARG..."
exit 7
fi
s=`echo "scale=2;$1 $2 $3"|bc`
echo "$1 $2 $3=$s"
练习:
传递参数给脚本,参数均为用户名,把passwd里面记录的此账号的相关信息提取保存到/tmp/user.txt中,并要求有行号。
#!/bin/bash
if [ $# -lt 1 ];then
echo "Usage: `basename $0` ARG "
exit 7
fi
if ! id $1 &>/dev/null ;then
echo "$1 not exists!"
else
b=`cat user.txt|wc -l`
j=$[$b+1]
d=`grep "^\<$1\>" /etc/passwd`
echo "$j $d" >>user.txt
fi
练习:
写一个脚本,判断当前主机的cpu生产商,其信息在/proc/cpuinfo文件中vendor id 一行中
如果其生产商为AuthenticAMD,就显示其为AMD公司;
如果其生产商为GenuineIntel,就显示其为Intel公司
否则,就显示其为非主流公司
#!/bin/bash
Info=`cat /proc/cpuinfo |grep vendor|cut -d: -f2|sed 's/[[:space:]]*\(.*\)/\1/'`
if [ $Info == GenuineIntel ]||[ $Info == AuthenticAMD ];then
echo "${Info}'s cpu!"
else
echo "rubbish cpu"
fi
练习:
写一个脚本,给脚本传递三个整数并显示其最大值和最小值。
#!/bin/bash
if [ $# -ne 3 ];then
echo "Usage:`basename $0` ARG1 ARG2 ARG3"
exit 1
fi
case $1 in
[[:digit:]]*)
;;
*)
echo "ARG1 must be the integer!"
exit 7
;;
esac
case $2 in
[[:digit:]]*)
;;
*)
echo "ARG2 must be the integer!"
exit 7
;;
esac
case $3 in
[[:digit:]]*)
;;
*)
echo "ARG3 must be the integer!"
exit 7
;;
esac
MAX=0
MIN=$1
for i in $1 $2 $3;do
if [ $MAX -lt $i ]; then
MAX=$i
fi
if [ $MIN -gt $i ];then
MIN=$i
fi
done
echo "MAX:$MAX MIN:$MIN"
写一个脚本:
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,例如:
hello,root,your shell :/bin/bash
3、统计一共有多少个用户
#!/bin/bash
FILE=/etc/passwd
count=`cat /etc/passwd|wc -l`
for i in `seq 1 $count`
do
user=`cat /etc/passwd|head -$i|tail -1|cut -d: -f1`
shell=`cat /etc/passwd|head -$i|tail -1|cut -d: -f7`
echo "Hello $user,your shell :$shell"
done
echo "there are $count users"
写一个脚本:
1添加10个用户user1到user10,但要求只有用户不存在的情况才添加
#!/bin/bash
for i in `seq 1 10 `;do
if id user$i &>/dev/null ;then
echo "user$i exists!!"
else
useradd user$i
echo "useradd user$i finished !"
fi
done
写一个脚本:
计算100以内所有能被3整除的正整数的和;
#!/bin/bash
declare -i sum=0
for i in {1..100}
do
if [ $[$i%3] -eq 0 ] ;then
sum=$[$sum+$i]
fi
done
echo "sum : $sum "
写一个脚本:计算100以内所有奇数的和以及所有偶数的和
#!/bin/bash
declare -i oddsum=0
declare -i evensum=0
for i in `seq 1 100`
do
if [ $[$i%2] -eq 0 ] ; then
evensum=$[$evensum+$i]
else
oddsum=$[$oddsum+$i]
fi
done
echo "oddsum:$oddsum
evensum:$evensum"
写一个脚本分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数,形如:
bash 3user they are:
root redhat centos
#!/bin/bash
shcount=`cat /etc/passwd |grep "\<bash\>"|wc -l`
nocount=`cat /etc/passwd |grep "\<nologin\>"|wc -l`
user1=`cat /etc/passwd |grep "bash\>"|cut -d: -f1`
user2=`cat /etc/passwd |grep "\<nologin\>"|cut -d: -f1`
for i in $user1
do
shuser="$shuser $i"
done
for i in $user2
do
nouser="$nouser $i"
done
echo "bash ${shcount}user they are :
$shuser"
echo "nologin ${nocount}user they are:
$nouser"