Linux编写shell脚本if for while
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux编写shell脚本if for while
使用if条件语句
If语句好处:可以根据特定条件来决定是否执行某项操作,当满足不同条件时执行不同操作,
相关条测试操作
Test 条件表达式
[ 条件表达式] [ ] 方括号与条件表达式需要用空格进行分隔
1.测试文件状态
-d 是否为目录
-e 文件是否存在
-f 是否为文件
-r 是否有读取的权限
-w 是否有写入权限
-x 是否有执行权限
-L 是否为链接文件
2. 整数值比较
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
3. 字符串比较
= 匹配
!= 不匹配
-z是否为空
!用于取反
4逻辑测试
&&逻辑与(前后两个条件都为真时,结果才为真)
||逻辑或(有一个条件成立,结果即为真)!逻辑非(指定条件不成立,结果为真)if语句的结构
1.单分支的if语句
if条件测试命令
then
命令序列
fi
条件成立
执行then后一条或多条命令(命令序列)直到fi 表示结束
条件不成立
直接执行fi
条件成立
执行then后的一条或多条命令(命令序列)条件不成立
执行else后的一条或多条命令
直到fi
2.双分支的if语句
if 条件测试命令
then
命令序列1
else
命令序列2
fi
条件成立
执行then后的一条或多条命令(命令序列)
条件不成立
执行else后的一条或多条命令
直到fi
3.多分支的if语句(更多使用case语句来实现)
根据if语句条件测试命令的两种状态分别进行操作,嵌套使用,
条件1为真:执行then后的命令直到fi
条件1为假:执行elif后的条件2
条件2为真,执行命令2,直到fi
为假,执行else后的命令3直到fi
if 条件测试命令1
then
命令序列1
elif 命令测试条件2
then
命令序列2
else
命令序列3
fi
根据if语句条件测试命令的两种状态分别进行操作,嵌套使用,
条件1为真:执行then后的命令直到fi
条件1为假:执行elif后的条件2
条件2为真,执行命令2,直到fi
为假,执行else后的命令3直到fi
将case后边的变量只与模式1、模式2 ………..等进行逐一比较,直到找到与之匹配的值,然后执行该模式下的命令序列,当遇到;;后跳转至esac后结束分支
4.case语句(适用于需要进行多重分支的情况)
case 变量值in
模式1)
命令序列1
;;
模式2)
命令学列2
;;
..........
*)
esac
将case后边的变量只与模式1、模式2 ………..等进行逐一比较,直到找到与之匹配的值,然后执行该模式下的命令序列,当遇到;;后跳转至esac后结束分支
使用in关键字为用户自定义变量设置了一个取值列表(以空格分隔的多个值),for语句第一次执行时,先将列表中的第一个值赋给变量,然后执行do后边的命令序列,再将第二个取值赋给该变量,然后执行do后边的命令序列,一直循环,直到列表中的所有值都已经用完,跳转至done
for语句结构
for 变量名取值列表
do
命令序列
done
使用in关键字为用户自定义变量设置了一个取值列表(以空格分隔的多个值),for语句第一次执行时,先将列表中的第一个值赋给变量,然后执行do后边的命令序列,再将第二个取值赋给该变量,然后执行do后边的命令序列,一直循环,直到列表中的所有值都已经用完,跳转至done
条件为真执行do 后边的命令然后返回到while再次判断,条件为真,继续执行do后的命令序列,直到条件为假,跳转到done语句,结束循环
while语句结构
while 条件测试命令
do
命令序列
done
条件为真执行do 后边的命令然后返回到while再次判断,条件为真,继续执行do后的命令序列,直到条件为假,跳转到done语句,结束循环
until循环
与while循环结构非常类似,只不过,until是当条件不成立时进行循环,until 命令测试条件
do
命令序列
Done
shift语句(迁移位置变量)
执行shift命令后,位置变量($1 -----$9)中的参数会依次向左传递
循环控制语句
break 中断:跳出当前所在的循环,并不跳出程序
continue 继续:暂停本次循环,跳转至循环语句顶部重新测试条件
shell函数的定义和调用
定义
Function 函数名{
命令序列
}
函数名(){
命令序列
}
调用:直接调用函数名称即可