发布时间:2014-09-05 17:08:44作者:知识屋
上一篇文章主要讲的是shell中最基础的东西像history,文件/数字等测试,如何执行一个脚本等,这次主要是介绍一些稍微深入的内容。
比如test测试,if条件语句,for循环,while循环,case语句,自定义函数等,希望对大家有帮助,大家多提意见。。。。。
一.条件测试操作
1. test命令
用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值
格式:test 条件表达式
[ 条件表达式]
常见的测试类型: 测试文件状态 字符串比较 整数值比较 逻辑测试
1) 测试文件状态
格式:[ 操作符 文件或目录]
c.常用的测试操作符
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否可执行(Excute)该文件
-L:测试是否为符号连接(Link)文件
[ -e /etc/sysconfig/ ] && echo "yes"
2) 整数值比较
格式:[ 整数1 操作符 整数2 ]
常用的测试操作符
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
3) 字符串比较
格式:[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串]
常用的测试操作符
=:字符串内容相同
!=:字符串内容不同,! 号表示相反的意思
-z:字符串内容为空
4) 逻辑测试
a) 格式:[ 表达式1 ] 操作符[ 表达式2 ] ...
常用的测试操作符
-a或&&:逻辑与,“而且”的意思
p 前后两个表达式都成立时整个测试结果才为真,否则为假
-o或||:逻辑或,“或者”的意思
二.if条件语句
1.单分支:
如果/boot分区的空间使用超过80%,输出报警信息
#!/bin/bash
RATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 `
if [ $RATE -gt 80 ]
then
echo "Warning,DISK is full!"
fi
2. 双分支
当“条件成立”、“条件不成立”时执行不同操作
例子:判断sshd是否在运行,若已运行则输出提示信息,否则重新启动sshd服务
#!/bin/bash
service sshd status &> /dev/null
if [ $? -eq 0 ]
then
echo "mysqld service is running."
else
/etc/init.d/sshd restart
fi
3. 多分支
三.for循环语句
根据变量的不同取值,重复执行一组命令操作
例子1:依次输出3条文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串
#!/bin/bash
for TM in "Morning" "Noon" "Evening"
do
echo "The $TM of the day."
done
例子2:
#!/bin/bash
DIR="/opt"
LMT=100
ValidUsers=`grep "/bin/bash" /etc/passwd | cut -d ":" -f 1`
for UserName in $ValidUsers
do
Num=`find $DIR -user $UserName | wc -l`
if [ $Num -gt $LMT ] ; then
echo "$UserName have $Num files."
fi
done
四.while循环语句
应用示例1:
批量添加20个系统用户帐号, 用户名依次为“stu1”、“stu2”、……、“stu20”
#!/bin/bash
i=1
while [ $i -le 20 ]
do
useradd stu$i
echo "123456" | passwd --stdin stu$i &> /dev/null
i=`expr $i + 1`
done
应用示例2:删除刚建立的20个帐户
#!/bin/bash
i=1
while [ $i -le 20 ]
do
userdel -r stu$i
i=`expr $i + 1`
done
五.case多重分支语句
根据变量的不同取值,分别执行不同的命令操作
#!/bin/bash
echo -n "please inset some keys:"
read AA
case $AA in
[a-z]|[A-Z])
echo "they are letters"
;;
[0-9])
echo "they are number"
;;
*)
echo "they are other words"
;;
esac
六.until循环语句
until语句根据条件执行重复操作,与while循环正好相反
七.shift迁移语句
用于迁移位置变量,将$1~$9 依次向左传递
例如,若当前脚本程序获得的位置变量如下:
p $1=file1、$2=file2、$3=file3、$4=file4
则执行一次shift命令后,各位置变量为:
p $1=file2、$2=file3、$3=file4
再次执行shift命令后,各位置变量为:
p $1=file3、$2=file4
#!/bin/bash
Result=0
while [ $# -gt 0 ]
do
Result=`expr $Result + $1`
shift
done
echo "The sum is : $Result"
八.循环控制语句
1. break语句:在for、while、until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句
2. continue:在for、while、until等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环
九.Shell函数应用
Shell函数概述
在编写Shell脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数
合理使用Shell函数,可以使脚本内容更加简洁,增强程序的易读性,提高执行效率
1. 定义新的函数,两种方法:
方法一:
function 函数名{
命令序列
}
方法二:
函数名() {
命令序列
}
2. 例子
在脚本中定义一个加法函数,用于计算2个整数的和
调用该函数计算(12+34)、(56+78)的和
#!/bin/bash
adder() {
echo `expr $1 + $2`
}
adder 12 34
adder 56 789
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能