bash脚本执行的控制语句
2014-08-28 16:48
441 查看
一、bash脚本执行的控制语句:
1、顺序执行:默认,逐条执行各语句。
2、选择执行if:分支,条件判断,执行符合条件的分支。
(1)、单分支:
if 条件;then
分支
fi
[b](2)、双分支[/b]
if 条件;then
分支1
else
分支2
fi
[b](3)、多分支:[/b]
if 条件1;then
分支1
elif 条件2;then
分支2
elif 条件3;then
分支3
...
else
分支n
fi
(4)例1:写一个脚本,实现如下功能:
1、让用户通过键盘输入一个用户名
2、如果用户存在,就显示其用户名和UID
3、否则,就显示用户不存在。
#!/bin/bash
read -t 10 -p "Enter a username:" userName
if id $userName $> /dev/null;then
userID=`id -u $userName`
else
echo "$userName not exist"
fi
例2:写一个脚本,实现如下功能:
1、让用户通过键盘输入一个用户名,如果用户不存在就退出
2、如果用户的UID大于等于500,就说明是普通用户
3、否则,就说明是管理员或者系统用户。
#!/bin/bash
read -t 10 -p "Enter a userName" userName
if ! id $userName $> /dev/null;then
echo "$userName not exist."
exit 6
fi
userID=`id -u $userName`
if [ $userID -ge 500 ];then
echo "A common user."
else
echo "Admin or System user."
fi
例3:写一个脚本,实现如下功能:
1、让用户通过键盘输入一个用户名,如果用户不存在就退出
2、如果用户的UID等于GID,就说它是“good guy”
3、否则,就说它是“bad guy”
#!/bin/bash
read -t 10 -p "Enter a userName" userName
if ! id $userName $> /dev/null;then
echo "$userName not exist."
exit 6
fi
if [ `id -u $userName` -eq `id -g $userName` ];then
echo "Good guy."
else
echo "Bad guy."
fi
3、循环执行:将同一段代码反复执行有限次。
[b](1)、for:实现知道循环次数,[/b]
for var_name in 列表;
do
循环体
done
例1、循环执行添加三个用户;xiaowang,xiaoli,xiaosun
#!/bin/bash
for userName in xiaowang xiaoli xiaosun;
do
useradd $userName
done
(2)列表的生成方法:
生成数字:{start..end},seq [start] [step] end
例1:生成10个用户,分别为user101...user110
for userName in `seq 101 110`;
do
useradd user$userName
done
例2:将上面生成的10个用户删除,同时删除用户家目录
for userName in {101..110};
do
userdel -r user$userName
done
例3:写一个脚本,用file命令显示/var/log目录下的每个文件的内容类型
#!/bin/bash
dirName=/var/log
for fileName in $dirName/*
do
file $fileName
done
例4:写一个脚本,要求如下
a、创建/tmp/scripttest目录,用变量名保存目录名
b、在目录里创建测试文件tfile1-tfile20
c、创建用户testuser1和testuser2
d、将tfile1-tfile10的属主和属组改为testuser1
e、将tfile11-tfile20的属主和属组改为testuser2
#!/bin/bash
dirName=/tmp/scripttest
mkdir $dirName
for fileNo in {1..20}
do
touch $dirName/tfile$fileNo
done
useradd testuser1
useradd testuser2
for fileNo in {1..10}
do
chown testuser1:testuser1 $dirName/tfile$fileNo
done
for fileNo in {11..20}
do
chown testuser2:testuser2 #dirName/file$fileNo
done
或者
#!/bin/bashdirName=/tmp/scripttestmkdir $dirName useradd testuser1 useradd testuser2
for fileNo in {1..10} do touch $dirName/tfile$fileNo chown testuser1:testuser1 $dirName/tfile$fileNo done
for fileNo in {11..20} do touch $dirName/tfile$fileNo chown testuser2:testuser2 $dirName/tfile$fileNo done例5:用for写一个脚本,要求如下: 1、显示/etc/init.d/functions、/etc/rc.d/rc.sysinit和/etc/fstab各有多少行
2、输出格式为:/etc/init.d/functions: 行数 lines. /etc/rc.d/rc.sysinit: 行数 lines. /etc/fstab: 行数 lines. #!/bin/bash
for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab
do
lineCount=`wc -l $fileName|cut -d' ' -f1`
echo "$fileName :$lineCount lines"
done
例6:显示/etd/passwd中的第3、7和11行中的用户名和ID号
#!/bin/bash for lineNo in 3 7 11 do head -n #lineNo|tail -1|cut -d: -f1,3 done
例7:判断当前系统上的所有用户是Good guy还是Bad guy,条件如下:
1、如果用户的UID等于GID,就说它是“good guy”
2、否则,就说它是“bad guy”
#!/bin/bash
for userName in `cut -d :-f1 /etc/passwd`; do
if [ `id -u $userName` -eq `id -g $userName` ];then
echo "Good guy."
else
echo "Bad guy."
fi
done
例8:求200内所有3的整数倍的正整数的和
#!/bin/bash
declare -i sum=0
for i in {1..200};do
if [ $[$i%3] -eq 0 ];then
let sum+=$i
fi
done
echo "The sum is :$sum."
(3)、while:条件满足则循环,否则退出。
while 条件测试;do
循环体;
done
例如:
求100以内所有正整数的和。
declare -i sum=0;i=1
while [ $i -le 100 ];do
let sum+=$i
let i++
done
echo $sum
(4)、until:条件不满足则循环,否则退出。看以看出它与while相反。
until 测试条件;do
循环体
done
二、检查bash脚本语法命令:bash -n 脚本文件
三、执行脚本:bash 脚本文件,无需修改文件的执行权限
1、顺序执行:默认,逐条执行各语句。
2、选择执行if:分支,条件判断,执行符合条件的分支。
(1)、单分支:
if 条件;then
分支
fi
[b](2)、双分支[/b]
if 条件;then
分支1
else
分支2
fi
[b](3)、多分支:[/b]
if 条件1;then
分支1
elif 条件2;then
分支2
elif 条件3;then
分支3
...
else
分支n
fi
(4)例1:写一个脚本,实现如下功能:
1、让用户通过键盘输入一个用户名
2、如果用户存在,就显示其用户名和UID
3、否则,就显示用户不存在。
#!/bin/bash
read -t 10 -p "Enter a username:" userName
if id $userName $> /dev/null;then
userID=`id -u $userName`
else
echo "$userName not exist"
fi
例2:写一个脚本,实现如下功能:
1、让用户通过键盘输入一个用户名,如果用户不存在就退出
2、如果用户的UID大于等于500,就说明是普通用户
3、否则,就说明是管理员或者系统用户。
#!/bin/bash
read -t 10 -p "Enter a userName" userName
if ! id $userName $> /dev/null;then
echo "$userName not exist."
exit 6
fi
userID=`id -u $userName`
if [ $userID -ge 500 ];then
echo "A common user."
else
echo "Admin or System user."
fi
例3:写一个脚本,实现如下功能:
1、让用户通过键盘输入一个用户名,如果用户不存在就退出
2、如果用户的UID等于GID,就说它是“good guy”
3、否则,就说它是“bad guy”
#!/bin/bash
read -t 10 -p "Enter a userName" userName
if ! id $userName $> /dev/null;then
echo "$userName not exist."
exit 6
fi
if [ `id -u $userName` -eq `id -g $userName` ];then
echo "Good guy."
else
echo "Bad guy."
fi
3、循环执行:将同一段代码反复执行有限次。
[b](1)、for:实现知道循环次数,[/b]
for var_name in 列表;
do
循环体
done
例1、循环执行添加三个用户;xiaowang,xiaoli,xiaosun
#!/bin/bash
for userName in xiaowang xiaoli xiaosun;
do
useradd $userName
done
(2)列表的生成方法:
生成数字:{start..end},seq [start] [step] end
例1:生成10个用户,分别为user101...user110
for userName in `seq 101 110`;
do
useradd user$userName
done
例2:将上面生成的10个用户删除,同时删除用户家目录
for userName in {101..110};
do
userdel -r user$userName
done
例3:写一个脚本,用file命令显示/var/log目录下的每个文件的内容类型
#!/bin/bash
dirName=/var/log
for fileName in $dirName/*
do
file $fileName
done
例4:写一个脚本,要求如下
a、创建/tmp/scripttest目录,用变量名保存目录名
b、在目录里创建测试文件tfile1-tfile20
c、创建用户testuser1和testuser2
d、将tfile1-tfile10的属主和属组改为testuser1
e、将tfile11-tfile20的属主和属组改为testuser2
#!/bin/bash
dirName=/tmp/scripttest
mkdir $dirName
for fileNo in {1..20}
do
touch $dirName/tfile$fileNo
done
useradd testuser1
useradd testuser2
for fileNo in {1..10}
do
chown testuser1:testuser1 $dirName/tfile$fileNo
done
for fileNo in {11..20}
do
chown testuser2:testuser2 #dirName/file$fileNo
done
或者
#!/bin/bashdirName=/tmp/scripttestmkdir $dirName useradd testuser1 useradd testuser2
for fileNo in {1..10} do touch $dirName/tfile$fileNo chown testuser1:testuser1 $dirName/tfile$fileNo done
for fileNo in {11..20} do touch $dirName/tfile$fileNo chown testuser2:testuser2 $dirName/tfile$fileNo done例5:用for写一个脚本,要求如下: 1、显示/etc/init.d/functions、/etc/rc.d/rc.sysinit和/etc/fstab各有多少行
2、输出格式为:/etc/init.d/functions: 行数 lines. /etc/rc.d/rc.sysinit: 行数 lines. /etc/fstab: 行数 lines. #!/bin/bash
for fileName in /etc/init.d/functions /etc/rc.d/rc.sysinit /etc/fstab
do
lineCount=`wc -l $fileName|cut -d' ' -f1`
echo "$fileName :$lineCount lines"
done
例6:显示/etd/passwd中的第3、7和11行中的用户名和ID号
#!/bin/bash for lineNo in 3 7 11 do head -n #lineNo|tail -1|cut -d: -f1,3 done
例7:判断当前系统上的所有用户是Good guy还是Bad guy,条件如下:
1、如果用户的UID等于GID,就说它是“good guy”
2、否则,就说它是“bad guy”
#!/bin/bash
for userName in `cut -d :-f1 /etc/passwd`; do
if [ `id -u $userName` -eq `id -g $userName` ];then
echo "Good guy."
else
echo "Bad guy."
fi
done
例8:求200内所有3的整数倍的正整数的和
#!/bin/bash
declare -i sum=0
for i in {1..200};do
if [ $[$i%3] -eq 0 ];then
let sum+=$i
fi
done
echo "The sum is :$sum."
(3)、while:条件满足则循环,否则退出。
while 条件测试;do
循环体;
done
例如:
求100以内所有正整数的和。
declare -i sum=0;i=1
while [ $i -le 100 ];do
let sum+=$i
let i++
done
echo $sum
(4)、until:条件不满足则循环,否则退出。看以看出它与while相反。
until 测试条件;do
循环体
done
二、检查bash脚本语法命令:bash -n 脚本文件
三、执行脚本:bash 脚本文件,无需修改文件的执行权限
相关文章推荐
- 10、bash脚本编程之程序语句选择执行、循环执行
- Bash脚本执行mysql语句
- Linux基础之bash脚本编程进阶篇-选择执行语句(if,case)
- shell脚本中执行mysql 语句的方法
- 没有#!的bash脚本的执行
- Bash下如何执行python脚本文件
- 脚本执行SQL语句 sql server
- linux shell 控制脚本执行次数
- 执行一个SQL语句或者存储过程(无事务控制),返回一个内存表
- 使用Bash编写Linux Shell脚本-8.调试和版本控制
- 执行脚本出现bin/bash: bad interpreter: No such file or directory
- ubuntu下source、sh、bash、./执行脚本的区别
- python控制语句的执行顺序
- 【紧急提问】:MySql存储过程脚本中含有预处理语句时,不能执行脚本
- 执行SQL脚本语句判断是否已经存在
- [Lua脚本实践1]LuaPlus中关于语句的执行
- 给朋友写了一个从脚本文件逐行加载执行SQL语句的程序,现在分享给将来需要的朋友们参考
- bash脚本性能测试之:代码段执行时间
- 执行脚本实现超时时间控制 ---Process
- 执行SQL语句脚本文件