bash脚本编程之五 字符串测试及for循环
1、字符测试:
==或=:用于字符串比较是否相同,相等为真,不等为假(等号两端预留空格)
例:[root@Ourlab ~]# A=hello
[root@Ourlab ~]# B=hi
[root@Ourlab ~]# [ $A == $B ]
[root@Ourlab ~]# echo $?
1
!=:用于比较字符串是否不等,不等为真,相等为假
例:[root@Ourlab ~]# A=hello
[root@Ourlab ~]# B=hi
[root@Ourlab ~]# [ $A != $B ]
[root@Ourlab ~]# echo $?
0
-n string:测试指定字符串是否为空,空则真,不空为假
-z string:测试指定字符串是否不空,空则假,不空为真
for循环:进入条件,退出条件
用法:
for 变量 in 列表; do
循环体
done
`seq [起始数 [步进长度]] 结束数`:生成数值列表
例:[root@Ourlab ~]# seq 1 2 10
1
3
5
7
9
declare:声明变量
-i:将变量声明为整形
-x:将变量声明为环境变量
例:写一个脚本,完成1加到100,并显示结果:
#!/bin/bash
#
declare -i SUM=0
for I in {1..100}; do
let SUM=$[$SUM+$I];
done
echo "The sum is:$SUM."
练习一:写一个脚本
传递一个参数(单字符就行)给脚本,如果参数为q,就退出脚本;否则,就显示用户的参数;
#!/bin/bash
#
if [ $1 == "q" ]; then
echo "EXIT!"
exit 0
else
echo "NO EXIT!"
fi
练习二:写一个脚本
传递一个参数(单字符就行)给脚本,如果参数为q,Q、quit或Quit,就退出脚本;否则,就显示用户的参数;
#!/bin/bash
#
if [ $1 == 'q' ]; then
echo "EXIT."
exit 0
elif [ $1 == 'Q' ]; then
echo "EXIT."
exit 0
elif [ $1 == 'quit' ]; then
echo "EXIT."
exit 0
elif [ $1 == 'Quit' ]; then
echo "EXIT."
exit 0
else
echo "$1."
fi
练习三:写一个脚本
传递三个参数给脚本,第一为整数,第二个为算术运算符,第三个为整数,将计算结果显示出来,要求保留两位小数。形如:./calc.sh 5 / 2
#!/bin/bash
#
echo "scale=2;$1$2$3" | bc
练习四:写一个脚本
给脚本传递三个整数,判断其中的最大数和最小数,并显示出来。
#!/bin/bash
#
if [ $# -ne 3 ]; then
echo "Please input three numbers."
exit 10
elif [ $1 -ge $2 ]; then
MAX=$1
MIN=$2
else
MAX=$2
MIN=$1
fi
if [ $3 -gt $MAX ]; then
MAX=$3
elif [ $3 -lt $MIN ]; then
MIN=$3
fi
echo "The MAX is $MAX,the MIN is $MIN."
练习五:写一个脚本
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:Hello,root,your shell:/bin/bash
3、统计一共有多少个用户
提示:for I in `seq 1 $LINES`; do echo "hello, `head -n $I /etc/passwd | tail -1 | cut -d: -f1`" ;done
#!/bin/bash
#
FILE="/etc/passwd"
LINES=`wc -l /etc/passwd | cut -d ' ' -f1`
for I in `seq 1 $LINES`; do
echo "hello,`head -n $I /etc/passwd | tail -1 | cut -d: -f1`";
done
echo "The users number is $LINES."
练习六:写一个脚本
1、添加10个用户user1到user10,密码同用户名;但要求只有用户不存在的情况下才能添加;
#!/bin/bash
#
for I in `seq 1 10`; do
cut -d: -f1 /etc/passwd | grep "user$I" 2>> /tmp/etc.err || useradd user$I
done
2、针对上题扩展:接受一个参数:add:添加用户user1...user10;del:删除用户user1...user10;其他:退出
#!/bin/bash
#
if [ $1 = 'add' ]; then
for I in {1..10};do
if id user$I &> /dev/null; then
echo "The user$I is exist."
else
useradd user$I
echo "user$I" | passwd --stdin user$I &> /dev/null
echo "The user$I already added."
fi
done
elif [ $1 = 'del' ]; then
for I in {1..10}; do
userdel -r user$I
echo "The user$I already deleted."
done
else
echo "Please input add or del."
exit 2;
fi
练习七:
写一个脚本:
1、计算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 "The sum is $SUM."
练习八:写一个脚本:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;
#!/bin/bash
#
JSUM=0 #奇数和变量
OSUM=0 #偶数和变量
for I in {1..100}; do
if [ $[$I%2] -eq 0 ]; then
OSUM=$[$OSUM+$I];
else
JSUM=$[$JSUM+$I];
fi
done
echo "The OSUM is $OSUM,the JSUM is $JSUM."
阅读(918) | 评论(0) | 转发(0) |