shell脚本学习心得
近来主要捣鼓ubuntu,大多数项目中都用到了sh脚本作为启动脚本等,以前只是大概明白如何使用,今天需要自己修改并运行脚本就碰到了很多问题,所以决定静下心来学习一下shell脚本,学习了几个小时,现将一些要点总结如下,以供以后翻看或者供入门人员参考。
- 第一行
 
这里指的是脚本第一行,一般脚本第一行都是
#!/usr/bin/env bash
这句话的意思是告诉操作系统用哪个命令来解析脚本,一般不用改变
- 脚本(函数)参数
 
运行xx.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)
注:如果以上字符出现在函数里就是函数的输入
- 控制语句
- if
 
 
“if” 表达式如果条件为真则执行then后面的部分:
if ….; then
….
elif ….; then
….
Else
….
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
通常用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
[ -d "$f" ] 判断f这个变量的值是否是个文件夹
- for循环
 
for TIF in $(ls $LAYERS)
do
INPUT=file:$($LAYERS/$TIF)
echo $INPUT
done
ls $LAYERS表示列出文件夹下所有文件,所以这是个集合,for循环遍历集合里所有文件,TIF为循环变量
- 操作符
- &&
 
 
&&意思是如果左边成立执行右边相当于 与
如:dir=$(cd "$dir" && /bin/pwd);
这句话的意思是如果cd dir变量的值没有错误即dir变量所代表的文件夹路径正确,则执行/bin/pwd,即输出全路径
- 变量定义
 
LAYERNAME="SRTM"
无需申明但是=前后不能有空格,使用的时候$LAYERNAME 或者 ${LAYERNAME}
- 函数
- 定义函数
 
 
realpath ()
{
f=$@;
echo "$f"
if [ -d "$f" ]; then
base="";
dir="$f";
else
base="/$(basename "$f")";
dir=$(dirname "$f");
fi;
dir=$(cd "$dir" && /bin/pwd);
echo "$dir$base"
}
函数中的echo表示返回值,如果有多个echo最终输出会拼接起来。函数中的$@等表示函数的参数
- 使用函数
 
只需使用 realpath $LAYERS即可,$LAYERS为变量,realpath后面可以跟任意数量的参数以空格隔开,这些参数可以被realpath中的$@全部接受。其实echo就是个函数
以上就是我所学到的shell脚本编写语法,不足之处还请大家补充。
shell脚本学习心得的更多相关文章
- 笔记——shell脚本学习指南
		
<shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...
 - Shell 脚本学习资料搜集
		
Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...
 - 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
		
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
 - 转 shell脚本学习指南
		
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
 - Shell脚本学习 - 运算符
		
继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...
 - shell脚本学习总结02--数组
		
bash同时支持普通数组个关联数组,普通数组只能使用整数作为数组的索引,关联数组可以使用字符串作为数组的索引. 数组的定义方法: 在单行中使用一列值定义一个数组 [root@new ~]# array ...
 - Shell脚本学习指南笔记
		
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
 - shell脚本学习之6小时搞定(1)
		
shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...
 - shell脚本学习(一)
		
Shell脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型.特定的工作. Shell的特点有: 1. 简单性 2. 可移植性 3. 开发容易 [什么是shell] 简单点理解,就是系统跟计算 ...
 
随机推荐
- js  经典正则判断 一个字符串是否包含另一个字符串
			
if (!new RegExp(list_table[i].value.split("—")[0]).test(lhtj)) { }判断在lhtj中是否包含list_table[i ...
 - 网上搜集了点资料,学web的人互相分享共同进步吧(php编码的好习惯必须养成)
			
网上搜集了点资料,学web的人互相分享共同进步吧 一.优秀的代码应该是什么样的? 优秀的PHP代码应该是结构化的.大段的代码应该被分割整理成一个个函数或方法,而那些不起眼的小段代码则应该加上注释,以便 ...
 - StoryBoard  简单使用
			
StoryBoard简单使用 故事版(storyboard)是一种简洁的图形界面,程序员可以采取拖的形式搭建一个界面,现在使用的xcode默认都会创建一个main.storyboard,作为app的入 ...
 - Word文字处理器发展演变
			
随着信息技术的不断发展,以前书面化的信笺,笔记,书籍以及作业演变成现在不断更新的电子化Word文档. Word是目前世界上最流行.最常用的文字编辑,排版软件,使用它不仅可以提高文档的编辑效率,在修改时 ...
 - FileInputStream和BufferedInputStream的区别
			
FileInputStream 属于数据源 BufferedInputStream 属于FileInputStream的一个装饰 BufferedInputStream 有个内部缓冲区当read时会先 ...
 - 一个事务复制的bug--更新丢失 续
			
阅读本文之前请参考http://www.cnblogs.com/stswordman/p/3258897.html 最近又做了一个case,环境是sql server 2008 R2. 客户添加了一个 ...
 - 基于ejbca构建独立ca系统
			
ejbca,是一个CA(Certificate Authority)系统软件,CA是数字证书认证中心的简称,主要功能是管理数字证书,包括证书的颁发.销毁.更新等,ejbca实现了CA规范,因此可以用来 ...
 - 我的ORM之十-- MyOql实现原理
			
我的ORM索引 ORM的功能 两个基本功能 翻译:对象查询转化为SQL 映射:把查询结果转化为实体 更多功能 如果仅仅实现这两个功能,那这两个是可以独立的,实现起来也就很简单了.但MyOql的目标还有 ...
 - 【Bugly干货】关于 Android N 那些你不知道的事儿
			
今年3月,Google 破天荒提前半年发布了 Android N 开发者预览版.当然,作为一个不合格的谷粉并没有第一时间体验安装,因为至今仍然能够回忆起来去年今日此门中(雾)兴冲冲刷了 Android ...
 - Java设计模式5:原型模式
			
原型模式 原型模式属于对象的创建模式,通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象,这就是原型模式的用意. 原型模式结构 原型模式要求对象实现一个 ...