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里的函数及脚本调试方法!的更多相关文章

  1. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  2. shell编程基础(转载)

    Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...

  3. 【转】Shell编程基础篇-下

    [转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...

  4. Linux学习之二十一-shell编程基础

    Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...

  5. 7-1 shell编程基础之二

    shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...

  6. 6-2 shell编程基础

    shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...

  7. Linux Shell 编程基础详解——吐血整理,墙裂推荐!

    第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...

  8. Linux之19——Shell编程基础详解

    第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...

  9. shell编程基础(4)case 与 function

    case case语句不用多说和c++里一样,用作选择,但是linux的case语句在语法上和c++还是有些不同的. ###########This is program test the Case# ...

随机推荐

  1. 安装QC的心(新)路历程 纯记录 无技术

    之前就只是看来软件测试原书第二版学习力理论知识,关于书中提到的缺陷管理工具,测试管理工具等也没有亲自去安装使用,感觉太不应该了.于是我就上网了解了一些测试管理工具后,决定先选择QC来学习.说实话,当初 ...

  2. 感知机学习算法(PLA)

    Perception Learning Algorithm, PLA 1.感知机 感知机是一种线性分类模型,属于判别模型. 感知机模型给出了由输入空间到输出空间的映射: f(X) = sign(WTX ...

  3. Z.XML-Cocos2d-x开发笔记

    大家都在热火朝天的使用Cocos2d-x引擎做游戏开发,那么大家不妨把过程中解决的关键问题记录在这里,做一个分享! 1.在Android平台下打开网页 1.1修改项目工程源文件 在你的项目工程源文件中 ...

  4. PokeCats开发者日志(一)

      现在是PokeCats游戏开发的第三天的上午,突然心血来潮想记录一下这个开发过程,于是写起了开发者日志. day1   作为一只ACM退役喵,寒假回家,闲着没事,天天在召唤师峡谷里闲逛也挺没意思的 ...

  5. 前端将markdown转换成html

    实现过程: 1. npm引入:npm install marked --save 2.在需要的文件(.ts)里import Marked from "marked";   如果.j ...

  6. WCF扩展记录服务调用时间

    WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Layer 之上还提供了一个高级运行时,主要是针对应用程序开发人员.在 WCF 文档中,它常被称为服务模型层(Serv ...

  7. Storm ui 显示异常

    今天安装storm集群的时候,各个进程也都起来,却发现Storm ui界面下无法观察Storm集群的状态 有很多地方处理不当都会造成这种现象: 1.storm.yaml配置不当 2.防火墙的问题 3. ...

  8. BZOJ4416 SHOI2013阶乘字符串(状压dp)

    当n大到一定程度(>21)时一定无解,并不会证. 如果要取出一个排列,显然应该让每一位在序列中的位置尽量靠前.于是设f[S]表示存在S子集中这些字母所组成的所有排列的最短前缀的长度,枚举当前排列 ...

  9. bzoj3011 可并堆

    我们可以遍历得出每个节点到根节点的距离h,然后用可并堆进行维护.树形dp 我用的是pairing heap #include<cstdio> #include<algorithm&g ...

  10. [UOJ #52]【UR #4】元旦激光炮

    题目大意:交互题,给你三个有序数组,长度分别为$n\_a,n\_b,n\_c$,都不超过$10^5$.三个函数$get\_a(i),get\_b(i),get\_c(i)$,分别返回$a_i,b_i, ...