shell脚本进阶篇(上)

shell脚本是我们学习运维的难点,本篇内容简单举例shell脚本的进阶上篇,有任何技术上的指导,知识上的不足都欢迎指出点明。

流程控制

过程式编程语言: 顺序执行   选择执行  循环执行

条件选择if语句

? 单分支

if 判断条件;then
条件为真的分支代码
fi

双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi

多分支
if 判断条件1; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi

逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句

举例:

编写脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)

执行结果如下

举例2

编写脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数

执行结果如下

条件判断:case语句

case 变量引用 in

PAT1)
分支1
;;

PAT2)
分支2
;;

...
*)
默认分支
;;

esac
case支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符
a|b: a或b

举例

创建一个脚本名为useradd.sh,
	当执行-a选项时,会批量创建用户mageuser1~mageuser20,要求mageuserX的uid为200x,mageuserxx的uid为20xx,1~8用户的shell为/sbin/nologin,9~20用户的uid为/bin/bash。最后这20个用户的密码都设置为centos
	当执行-d选项时,批量删除用户mageuser1~mageuser20。连同家目录一同删除	

循环

循环执行
将某代码段重复运行多次
重复运行多少次:
循环次数事先已知
循环次数事先未知
有进入条件和退出条件

for循环

for 变量名 in 列表;do

循环体

done

举例

举例

编写脚本打印矩形

执行结果如下:

while循环

? while CONDITION; do

循环体

done

? CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件
为“true”,则执行一次循环;直到条件测试状态为“false”终止循环

? 因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正

? 进入条件:CONDITION为true

? 退出条件:CONDITION为false

举例

循环控制shift命令

? shift [n]

? 用于将参量列表 list 左移指定次数,缺省为左移一次。

? 参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环
遍历位置参量列表时,常用到 shift

? ./doit.sh a b c d e f g h

? ./shfit.sh a b c d e f g h

举例

执行结果如下

创建无限循环

? while true; do

循环体

? done

? until false; do

循环体

? Done

(shell 脚本进阶篇下一周后更新)

原文地址:http://blog.51cto.com/13570206/2158499

时间: 2024-08-28 23:19:46

shell脚本进阶篇(上)的相关文章

iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上-b

用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 相关资料和下载 首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门:https://github.com/heyuan110/BashShell?spm=5176.100239.blogcont5028.4.kFcLtR 还有关于fir指令的一

iOS开发进阶 - 使用shell脚本自动打包上传到fir.im上

如果移动端访问不佳,可以访问我的个人博客 用fir.im测试已经好长时间了,感觉每次打包上传都很麻烦,想着是不是可以用脚本自动打包,在网上搜了一下确实有,下面总结一下如何使用脚本自动打包上传到fir.im,以及打包过程中遇到的问题和解决办法 相关资料和下载 首先是打包脚本的下载地址,这个是我找到的比较全的一个,里面有很多不同功能的shell脚本,亲测好用,传送门 还有关于fir指令的一些介绍可以去这里查看,传送门 第一步安装fir-cil fir-cli 使用 Ruby 构建, 无需编译, 只要

shell脚本第二篇——将指定目录下大于200K的文件移动到/tmp下

shell脚本第二篇--将指定目录下大于200K的文件移动到/tmp下 # vim  /tmp/files.sh #!/bin/bash #将指定目录下大于200K的文件移动到/tmp下 read  -p  "请输入您要将目录下大于200K文件移动的目录路径:" $1 for FILE in `ls  $1` do if [ -f  $FILE ] ; then if [ `ls -l $FILE | awk `{print $5}` -gt 204800 ] ; then mv  $

Shell编程进阶篇(完结)

1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或是循环变数.这使得for循环能够知道在迭代过程中的执行顺序. 1.1.1 shell中的for循环 shell中的for 循环与在c中不同,它包含三种形式:第一种结构是列表for 循环;第二种结构就是不带列表的for循环:第三种就类似于C语言. ①   列表for循环(常用) #!/bin/bash

shell脚本进阶

一.流程控制 流程控制语句,即用来实现对程序流程的选择.循环和返回等进行控制的语句. 1.条件判断 (1)if条件判断 普通if条件判断 格式: 嵌套if条件判断 格式: (2)case判断 简洁版多分支if语句,当if语句有多个elif时可以使用case语句代替,语言更简洁容易理解.使用场景:判断某个变量值是否为多种情形中的一种时使用. 格式: 示例: 执行结果: 2.循环 循环执行就是将循环体内的代码重复运行多次:运行的次数由进入循环的条件和退出循环决定. (1)for循环 格式: 列表:变

Linux基础之bash脚本进阶篇-函数

函数,什么是函数? 函数的出现最初是在数学中,它的数学定义如下:在某变化过程中有两个变量x,y,按照某个对应法则,对于给定的x,有唯一确定的值y与之对应,那么y就叫做x的函数. 而在计算机中函数的内涵发生了一些变化. 在编程中,为了简化代码量,通常会将经常调用的一些代码模块化,并一一个名字表示,当再次使用该模块时只需要输入该名字,系统会自动去读取该名字所对应的代码模块.因此在计算机中把一段独立功能的代码当做一个整体,并为之命一个名字,命名的代码段即为函数. 虽然此函数非彼函数但函数最本质的意义并

shell脚本进阶(一)

一.逻辑运算 变量: 本地变量.环境变量.局部变量.位置参数变量.特殊变量 变量赋值:name=value,export name=value,declare -x name=value 变量引用:$name,${name} 注意:有些时候{}不能省略,例如 echo "$valuemagedu.com" echo "${value}magedu.com" 撤销:unset name bash脚本编程,运行脚本 #!/bin/bash      #称为shebang

shell脚本进阶(二)

select 循环与菜单 select variable in list do 循环体命令 done select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入 用户输入菜单列表中的某个数字,执行相应的命令 用户输入被保存在内置变量REPLY 中. select 是个无限循环,因此要记住用break 命令退出循环,或用exit 命令终止脚本.也可以按ctrl+c 退出循环. select 经常和case 联合使用 与for 循环类似,可以省略

shell脚本进阶之循环判断

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 14.0pt; font-family: 等线 } h1 { margin-top: 15.6pt; margin-right: 0cm; margin-left: 0cm; margin-bottom: .0001pt; text-align: justify; line-he