本帖最后由 kashu 于 2013-7-24 22:06 编辑
面向过程: 顺序执行 选择执行: if, case 循环执行: for, while, until 一、for语句 格式: for 变量 in 列表;do 语句1; 语句2; ... done 例1、写一个脚本,添加10个用户,并让每个用户的密码同用户名】
[Bash shell] 纯文本查看 复制代码 #!/bin/bash
for I in {1..10}; do
useradd user$I;
echo user$I | passwd --stdin user$I
done 例2、写一个脚本,分别显示 /tmp/1.dir /tmp/2.dir /tmp/3.dir三个文件的时间戳,并将这三个文件被修改的时间改为201003030303.03 [Bash shell] 纯文本查看 复制代码 #!/bin/bash
for Dir in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do
stat $Dir
touch -m -t 201003030303.03 $Dir
stat $Dir
done
bash的变量类型: 本地变量 局部变量 环境变量 位置变量 :$1、$2、$3、$4.... 特殊变量: $?: 用于保存刚刚执行的命令的状态返回值; 0:成功执行;1-255:失败,1,2,127 可以使用exit命令在脚本中自定义脚本执行状态返回值;如果不定义,脚本执行状态返 回值取决于脚本执行结束前最后执行的那个语句的状态;
$@, $*: 所有位置参数; $#: 位置参数的个数; $0: 脚本名称 二、if语句 1、单分支if语句: 格式: if 条件; then 语句1 语句2 ... fi 例3、写一个脚本,实现如下功能: 如果用户存在,就说明其存在;
[Bash shell] 纯文本查看 复制代码 #!/bin/bash
UserName=user1
if grep -q "^$UserName\>" /etc/passwd; then
echo "$UserName exists."
fi 例4、写一个脚本,实现如下功能:如果设备/dev/sda3已经挂载,就显示其挂载点; [Bash shell] 纯文本查看 复制代码 #!/bin/bash
Device='/dev/sda3'
if mount | grep -q "^$Device"; then
mount | grep "/dev/sda3" | cut -d' ' -f3
fi 例5、写一个脚本,实现如下功能: 如果/etc/rc.d/rc.sysinit中有空白行,就显示其空白行数; [Bash shell] 纯文本查看 复制代码 #!/bin/bash
File='/etc/rc.d/rc.sysinit'
if grep -q "^$" $File; then
grep "^$" $File | wc -l
fi 2、双分支if语句: 格式: if 条件; then 语句1 语句2 ... else 语句1 语句2 ... fi 例6、写一个脚本,实现如下功能: 如果设备/dev/sda3已经挂载,就显示其挂载点;否则,就说明其未挂载或设备不存在; [Bash shell] 纯文本查看 复制代码 #!/bin/bash
Device='/dev/sda3'
if mount | grep -q "^$Device"; then
mount | grep "/dev/sda3" | cut -d' ' -f3
else
echo "$Device not mounted or not exist."
fi 3、多分支if语句: 格式: if 条件1; then 语句1 语句2 ... elif 条件2; then 语句1 语句2 ... elif 条件3; then 语句1 语句2 ... else 语句1 语句2 ... fi 例7、写一个脚本: 判断当前主机的CPU生产商,其信息在/proc/cpuinfo文件中vendor id一行中。 如果其生产商为GenuineIntel,就显示其为Intel公司; 如果其生产商为AuthenticAMD,就显示其为AMD公司; 否则,就显示无法识别; [Bash shell] 纯文本查看 复制代码 #!/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
|