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. Linux下创建pycharm的快捷方式

    第一步:创建桌面快捷方式文件Pycharm.desktop,并打开 sudo gedit /usr/share/applications/Pycharm.desktop 第二步:在打开的文件Pycha ...

  2. Python-学习-import语句导入模块

    简单的学习一下调用外部的模块文件. 在Python中,模块是一种组织形式,它将彼此有关系的Pyrhon 代码组织到一个个独立的文件当中,模块可以包含可执行代码,函数,和类或者是这些东西的组合. 当我们 ...

  3. 虚拟现实-VR-UE4-获取UE4

    UE4现在虽然是开源,但是并不是免费的,在你的游戏成功后,回收取5%费用和每个月19美元的费用 所以,第一步,进去UE4官网:https://www.unrealengine.com/zh-CN/wh ...

  4. 牛客网暑期ACM多校训练营(第七场):J-Sudoku Subrectangles

    链接:J-Sudoku Subrectangles 题意:给出 n * m 的字母矩阵,公52种字母.求出不含重复元素的子矩阵的个数. 题解: L[i][j]:s[i][j] ~ s[i][ j - ...

  5. 分享 go语言爬虫---开源项目Pholcus

    写在开头的话:记录一下最近学习Pholcus(https://github.com/henrylee2cn/pholcus)的过程,首先去学习的go基本语法,在没接触的时候发现很多不理解的地方,但是当 ...

  6. ardupilot_gazebo仿真(一)

    ardupilot_gazebo仿真 标签(空格分隔): 未分类 ardupilot_gazebo仿真 官网网址 代码更新地址 Ardupilot Gazebo Plugin & Models ...

  7. Visual Studio各版本工程文件之间的转换 [转载]

    原网址:http://www.cnblogs.com/jmliao/p/5594179.html Visual Studio各版本工程文件之间的转换   由于VS版本比较多,低版本无法直接打开高版本的 ...

  8. [CF912A]Tricky Alchemy

    题意:你有a个黄水晶和b个蓝水晶,要求要x个黄水晶球(2黄),y个绿水晶球(1黄1蓝),z个蓝水晶球(3蓝),问还要多少水晶题解:模拟 C++ Code: #include<cstdio> ...

  9. BZOJ 2226 [Spoj 5971] LCMSum | 数论拆式子

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2226 题解: 题目要求的是Σn*i/gcd(i,n) i∈[1,n] 把n提出来变成Σi/g ...

  10. BZOJ5323 [Jxoi2018]游戏 【数论/数学】

    题目链接 BZOJ5323 题解 有一些数是不能被别的数筛掉的 这些数出现最晚的位置就是该排列的\(t(p)\) 所以我们只需找出所有这些数,线性筛一下即可,设有\(m\)个 然后枚举最后的位置 \[ ...