linux下shell编程基础篇二

简介:

比如test测试,if条件语句,for循环,while循环,case语句,自定义函数等,希望对大家有帮助,大家多提意见。。。。。

一.条件测试操作

1. test命令

clip_image004 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值

clip_image004[1] 格式:test 条件表达式

条件表达式 ]

常见的测试类型 : 测试文件状态 字符串比较 整数值比较 逻辑测试

1) 测试文件状态

clip_image004[2] 格式:[ 操作符 文件或目录 ]

c.常用的测试操作符

clip_image004[3] -d:测试是否为目录(Directory

clip_image004[4] -e:测试目录或文件是否存在(Exist

clip_image004[5] -f:测试是否为文件(File

clip_image004[6] -r:测试当前用户是否有权限读取(Read

clip_image004[7] -w:测试当前用户是否有权限写入(Write

clip_image004[8] -x:测试当前用户是否可执行(Excute)该文件

clip_image004[9] -L:测试是否为符号连接(Link)文件

[ -e /etc/sysconfig/ ] && echo "yes"

2) 整数值比较

clip_image004[10] 格式:[ 整数1 操作符 整数2 ]

常用的测试操作符

clip_image004[11] -eq:等于(Equal

clip_image004[12] -ne:不等于(Not Equal

clip_image004[13] -gt:大于(Greater Than

clip_image004[14] -lt:小于(Lesser Than

clip_image004[15] -le:小于或等于(Lesser or Equal

clip_image004[16] -ge:大于或等于(Greater or Equal

3) 字符串比较

clip_image004[17] 格式:[ 字符串1 = 字符串2 ]

字符串1 != 字符串2 ]

[ -z 字符串 ]

clip_image002 常用的测试操作符

clip_image004[18] =:字符串内容相同

clip_image004[19] !=:字符串内容不同,! 号表示相反的意思

clip_image004[20] -z:字符串内容为空

4) 逻辑测试

a) 格式:[ 表达式1 ] 操作符 [ 表达式2 ] ...

常用的测试操作符

clip_image004[21] -a或&&:逻辑与,“而且”的意思

p 前后两个表达式都成立时整个测试结果才为真,否则为假

clip_image004[22] -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. 双分支

当“条件成立”、“条件不成立”时执行不同操作

clip_image004[23] 例子:判断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循环语句

clip_image002[1] 应用示例1

clip_image004[24] 批量添加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

clip_image002[2] 应用示例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 依次向左传递

clip_image004[25] 例如,若当前脚本程序获得的位置变量如下:

p $1=file1、$2=file2、$3=file3、$4=file4

clip_image004[26] 则执行一次shift命令后,各位置变量为:

p $1=file2、$2=file3、$3=file4

clip_image004[27] 再次执行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. continuefor、while、until等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环

九.Shell函数应用

Shell函数概述

clip_image004[28] 在编写Shell脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数

clip_image004[29] 合理使用Shell函数,可以使脚本内容更加简洁,增强程序的易读性,提高执行效率

1. 定义新的函数,两种方法:

方法一:

function 函数名 {

命令序列

}

方法二:

函数名() {

命令序列

}

2. 例子

clip_image004[30] 在脚本中定义一个加法函数,用于计算2个整数的和

clip_image004[31] 调用该函数计算(12+34)、(56+78)的和

#!/bin/bash

adder() {

echo `expr $1 + $2`

}

adder 12 34

adder 56 789



本文转自 gehailong 51CTO博客,原文链接:http://blog.51cto.com/gehailong/626161,如需转载请自行联系原作者

相关文章
|
11天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
24天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
24天前
|
算法 Linux C++
【Linux系统编程】深入解析Linux中read函数的错误场景
【Linux系统编程】深入解析Linux中read函数的错误场景
196 0
|
24天前
|
Linux API C语言
【Linux系统编程】深入理解Linux 组ID和附属组ID的查询与设置
【Linux系统编程】深入理解Linux 组ID和附属组ID的查询与设置
30 0
【Linux系统编程】深入理解Linux 组ID和附属组ID的查询与设置
|
24天前
|
存储 算法 Linux
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
37 0
|
24天前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
36 0
|
2天前
|
监控 Shell 开发工具
Shell编程
Shell编程
|
9天前
|
存储 Shell Linux
【攻防世界】unseping (反序列化与Linux bash shell)
【攻防世界】unseping (反序列化与Linux bash shell)
|
11天前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
84 4
|
12天前
|
Shell Linux
【Linux】12. 模拟实现shell
【Linux】12. 模拟实现shell
27 2