【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003
本站文章均为李华明Himi原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/shell/764.html
☞ 点击订阅 ☜ 本博客最新动态!及时将最新博文通知您!
对于Shell书写和概念上一篇已经有所介绍,那么本篇继续学习Shell编程一些语法知识;
首先介绍Shell中的流程控制,例如判断语句等等…
if语句:
首先了解几个知识:
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
示例代码:
1
2
3
4
5
6
7
8
9
10
11
|
#!/bin/sh varOne=1 varTwo=2 varThree=3 if [ "$varOne" = "$varTwo" ]; then echo "varTwo:$varTwo" elif [ "$varOne" = "$varThree" ]; then echo "varThree:$varThree" else echo "varOne:$varOne" fi |
务必注意,[]比较的时候其括号前后的空格别忘了! = 等号前后也要有空格也要注意;
&& 和 || 操作符:
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/bin/sh varOne=1 varTwo=2 varThree=3 if [ "$varOne" = "$varThree" ] || [ "$varOne" = "$varTwo" ]; then echo "|| 进入" else echo "No || 进入" fi if [ "$varOne" = "$varOne" ] && [ "$varOne" = "$varTwo" ]; then echo "&& 进入" else echo "No && 进入" fi |
case 语句:
须知:
case表达式可以用来匹配一个给定的字符串,而不是数字(可别和C语言里的switch…case混淆)。
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/sh ftype=` file "$1" ` # Note ' and ` is different case "$ftype" in "$1: Zip archive" *) unzip "$1" ;; "$1: gzip compressed" *) gunzip "$1" ;; "$1: bzip2 compressed" *) bunzip2 "$1" ;; *) echo "File $1 can not be uncompressed with smartzip" ;; esac |
特殊变量$1,该变量包含有传递给该脚本的第一个参数值,也就是说,$1 就是字符串 articles.zip。
select 语句:
select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:
1
2
3
4
|
select var in ... ; do break ; done .... now $var can be used .... |
示例代码:
1
2
3
4
5
6
7
|
#!/bin/sh echo "What is your favourite OS?" select var in "Linux" "Gnu Hurd" "Free BSD" "Other" ; do break ; done echo "You have selected $var" |
如果 以上脚本运行出现 select :NOT FOUND 将 #!/bin/sh 改为 #!/bin/bash 该脚本的运行结果如下:
1
2
3
4
5
6
7
|
What is your favourite OS? 1) Linux 2) Gnu Hurd 3) Free BSD 4) Other #? 1 You have selected Linux |
while/for 循环:
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/bin/sh varOne=1 varTwo=1 # while while [ "$varOne" = "$varOne" ]; do echo "while Done" break done # for for varStr in H I M I ; do echo "varStr is $varStr" done |
输出:
1
2
3
4
5
6
|
while Done varStr is H varStr is I varStr is M varStr is I localhost:Desktop Himi$ |
select 语句:
须知:select表达式是bash的一种扩展应用,擅长于交互式场合。用户可以从一组不同的值中进行选择:
示例代码:
1
2
3
4
5
6
|
#!/bin/sh echo "What is your favourite?" select var in "iOS" "Android" "Himi" "Other" ; do break ; done echo "You have selected $var" |
执行脚本后,等待用户输入,然后在终端输入你的选择,回车,如下显示:
1
2
3
4
5
6
7
8
|
What is your favourite? 1) iOS 2) Android 3) Himi 4) Other #? 3 You have selected Himi localhost:Desktop Himi$ |
函数:
如果你写过比较复杂的脚本,就会发现可能在几个地方使用了相同的代码,这时如果用上函数,会方便很多。函数的大致样子如下:
1
2
3
4
5
6
|
functionname() { # inside the body $1 is the first argument given to the function # $2 the second ... body } |
示例代码:
1
2
3
4
5
6
7
|
#!/bin/sh himi() { echo "Function is ok" exit 0 } himi |
脚本调试:
最简单的调试方法当然是使用echo命令。你可以在任何怀疑出错的地方用echo打印变量值,这也是大部分shell程序员花费80%的时间用于调试的原因。Shell脚本的好处在于无需重新编译,而插入一个echo命令也不需要多少时间。shell也有一个真正的调试模式,如果脚本”strangescript”出错,可以使用如下命令进行调试:
sh -x strangescript
上述命令会执行该脚本,同时显示所有变量的值。shell还有一个不执行脚本只检查语法的模式,命令如下:
sh -n your_script
OK,本章主要是为了熟悉一些控制语句和常用知识点,那么到这对于Shell编程基础学习认识就算告一段落,如有必要以后会继续深入学习;暂时足以;
【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!的更多相关文章
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
- Linux学习之二十一-shell编程基础
Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...
- 7-1 shell编程基础之二
shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...
- 6-2 shell编程基础
shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...
- Linux Shell 编程基础详解——吐血整理,墙裂推荐!
第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...
- Linux之19——Shell编程基础详解
第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...
- shell编程基础(4)case 与 function
case case语句不用多说和c++里一样,用作选择,但是linux的case语句在语法上和c++还是有些不同的. ###########This is program test the Case# ...
随机推荐
- Charles的Https抓包及弱网配置
一.Charles的主要功能 (1)截取Http 和 Https 网络封包. (2)支持重发网络请求,修改请求参数,方便后端调试. (3)支持模拟弱网环境. 二.配置简单抓包 1.设置系统代理:勾选P ...
- python QQ邮箱自动发送邮件
于初学者来讲在写发送邮件代码时常见的错误有SMTPAuthenticationError535,有点懵逼,检查用户名,密码正确就是报错, 想当年笔者也是这么过来的,现在就给大家分享一下个人经验: 一, ...
- python学习总结----简单数据结构
mini-web服务器 - 能够完成简单的请求处理 - 使用http协议 - 目的:加深对网络编程的认识.为后面阶段学习web做铺垫 简单数据结构 - 排列组合 import itertools # ...
- vs code 在终端下使用 code ./ 打开当前项目
Mac OS Visual Studio Code的扩展工具菜单中有Install command line的快捷安装 运行 VS code并打开命令面板( ⇧⌘P ),然后输入 shell comm ...
- golang模拟新浪微博登录
1.基于幽灵蛛pholcus开源项目的规则 直接贴代码,代码可以更改后用于其他爬虫项目 package pholcus_lib // 基础包 import ( // "github.com/ ...
- Qscintilla2编译使用
Qscintilla2的下载地址: https://github.com/josephwilk/qscintilla https://riverbankcomputing.com/software/q ...
- ActiveMQ使用详解---相关概念
一.前言 公司之前使用activeMQ做过一款用于系统之间传递信息的工具,最近才正式投入生产使用,这期间出现了一些比较奇怪的问题,最终发现是没有清晰的了解activeMQ的相关配置以及一些相关概念,借 ...
- JavaScript五种继承方式详解
本文抄袭仅供学习http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html 一. 构造函数绑定 ...
- 【其他】Windows 系统安装IIS 打开页面出现空白解决方案
部署IIS过程中遇到了一个奇怪的问题,就是怎么设置打开的页面都是一篇空白,IIS也没有任何报错,翻遍互联网好不容易找到了解决方法,今天就教给大家,希望大家不要走弯路.此方法Windows xp.7.8 ...
- Linux 常用命令记录(学习笔记)
不同机器间文件传输(转自:http://www.zhimengzhe.com/mac/323324.html) scp是什么? scp是secure copy的简写,用于在Linux下进行远程拷贝文件 ...