Shell脚本学习第二课·
Shell文件包含
shell也可以包含外部脚本,语法格式如下:
. filename
或
source filename
例如创建两个shell脚本。
脚本1:test1.sh
url = "www.baidu.com"
脚本2:test2.sh
. ./test1.sh
echo "$url"
执行test2.sh,即可看到结果。
Shell输入输出重定向
| 命令 | 说明 |
| command>file | 将输出重定向到file |
| command<file | 将输入重定向到file |
| command>>file | 将输出以追加的方式重定向到file |
| n>file | 将文件描述符为n的文件重定向到file |
| n>>file | 将文件描述符为n的文件以追加的方式重定向到file |
| n>&m | 将输出文件m和n合并 |
| n<&m | 将输入文件m和n合并 |
| <<tag | 将开始标记tag和结束tag之间的内容作为输入 |
注意:文件描述符0通常是标准输入(STDIN),1是标准输出(STDOUT),2是标准错误输出(STDERR)
重定向深入讲解
一般情况下,每个Unix/Linux命令运行时都会打开三个文件:
- 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
- 标准输出文件(stdout):stdout的文件描述符为1,Unix程序默认向stdout输出数据
- 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下,command>file将stdout重定向到file,command<file将stdin重定向到file。
如果希望stderr重定向到file,可以这样写:
command 2>file #2表示标准错误文件
command 2>>file #追加 2表示标准错误文件
如果希望将stdout和stderr合并后重定向到file,可以这样写
command > file 2>&1
command >> file 2>&1
Shell函数
格式
[function] funname [()]
{
action;
[return int;] #return后跟数值n(0-255)
}
例子
demoFun(){
echo "这是我的第一个shell函数"
}
echo "--start--"
demoFun
echo "--end--"
例子:带有return
funWithRetun(){
echo "输入第一个数字"
return aNum
echo "输入第二个数字"
return bNum
return $(($aNum+$bNum))
}
funWithReturn
echo "输入的两个数字之和为$?" #函数返回值在调用该函数后通过$?来获得
例子:函数参数
funWithParam(){
echo "第一个参数为$1" #$1表示第一个参数,$2表示第二个参数,获取大于等于10个参数需用${n}
echo "第五个参数为$5"
echo "第十个参数为${10}"
echo "第十四个参数为${14}"
echo "所有参数$*"
}
funWithParam 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 参数处理 | 说明 |
| $# | 传递到脚本的参数个数 |
| $* | 以一个单字符串显示所有向脚本传递的参数 |
| $$ | 脚本运行的当前进程ID号 |
| $! | 后台运行的最后一个进程的ID号 |
| $@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数 |
| $- | 显示shell使用的当前选项,与Set命令功能相同 |
| $? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误 |
Shell流程控制
if else
格式:
if condition
then
command1
command2
fi
if else-if else
格式
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
for循环
格式
for var in item1 item2 ... itemN
do
command1
...
commandN
done
例子
for loop in 1 2 3 4 5
do
echo "the value is : $loop"
done
while
格式
while condition
do
command
done
例子
int=1
while(($int<=5))
do
echo $int
let "int++"
done
无限循环
while :
do
command
done
while true
do
command
done
until循环
until condition
do
command
done
case
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
跳出循环
break
continue
Shell脚本学习第二课·的更多相关文章
- shell脚本学习第一课
shell是一种程序设计语言,是访问操作系统内核的服务. Linux的shell种类常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- 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脚本学习指南>机械工业出版 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脚本学习之$0,$?,$!等的特殊用法
变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 ...
- Shell脚本学习 - 运算符
继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...
随机推荐
- 安卓虚拟机adb shell sqlite3数据库
adb shell 连接: //http://www.cnblogs.com/xiaobo-Linux/ Android把数据都存放在data/data目录下. 我们使用cd命令转到data/data ...
- plain framework 1 一款主要用于网络(游戏)开发的C/C++开源框架 安装篇 updated
上次介绍了一下plain framework的基础相关资料,今天该框架正式开源发布.项目的地址托管于github上,我相信大多数朋友都应该知道.今天要介绍的是该框架的目录基本结构,以及分别在linux ...
- JavaScript代码段整理笔记系列(一)
30段JavaScript代码——上篇 1.如何区分IE及非IE浏览器: if(!+[1,]){ //IE 11 不支持 alert("这是 IE 浏览器"): }else{ al ...
- BZOJ 2693: jzptab [莫比乌斯反演 线性筛]
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1194 Solved: 455[Submit][Status][Discu ...
- NodeJS、NPM安装配置步骤(windows版本)
windows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的"INSTA ...
- url转码
var target = encodeURI('我测试'); //--> target = %E6%88%91%E6%B5%8B%E8%AF%95 var afterConvert = deco ...
- 极路由2(极贰)ROOT并刷了OpenWrt
绕过官方的ROOT 查了一下root教程, 如果还需要保留保修, 则需要自己想办法回退版本, 下载搜狐插件到sd卡, 找个linux系统修改sd卡上程序的执行权限, 然后才能开启ssh, 具体的方法可 ...
- 011商城项目:图片服务器的安装---nginx
这个是电商的项目,不是传统项目,所以给图片单独架一台服务器. 我们看上图: 用户上传图片时上传到Tomcat1或者Tomcat2.然后Tomcat1和Tomcat2通过FTP服务把图片上传到图片服务器 ...
- MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...
- chrome 更新flash插件
下载下面的插件并安装 https://fpdownload.macromedia.com/pub/labs/flashruntimes/flashplayer/install_flash_player ...