1.if语句

if condition
then
statements
esle
statements
fi

例:

#!/bin/sh

echo "Is it morning? Please answer yes or no"
read timeofday if [ $timeofday = "yes" ]; then
echo "Good morning"
else
echo "Good afternoon"
fi
exit

 

2.elif语句

#!/bin/sh

echo "Is it morning? Please answer yes or no"
read timeofday if [ $timeofday = "yes" ]
then
echo "Good morning" elif [ $timeofday = "no" ]; then
echo "Good afternoon"
else
echo "Sorry!"
exit
fi exit

潜在的问题:
如果用户不输入直接按下回车,if [  = "yes" ]这个判断就会出错
所以必须给timeofday变量添加上引号

修改后:

#!/bin/sh

echo "Is it morning? Please answer yes or no"
read timeofday if [ "$timeofday" = "yes" ]
then
echo "Good morning" elif [ "$timeofday" = "no" ]; then
echo "Good afternoon"
else
echo "Sorry!"
exit
fi exit

echo -n "hello echo"
-n选项去掉换行符

 

 3.for语句

for variable in values
do
    statements
done

例1.

#!/bin/sh

for foo in bar fud
do
echo $foo
done exit

输出:
bar
fud
43

例2.

#!/bin/sh
for foo in "bar fud 43"#当做一个字符串
do
echo $foo
done
exit

输出:
bar fud 43

例3.

#打印当前目录中所有以字母f开头并且.sh结尾的脚本文件
#!/bin/sh
for file in $(ls f*.sh); do
lpr $file
done
exit

 

 4.while语句

1.不知道命令序列要执行的次数
 2.条件为真时反复执行

while condition do
    statements
done

#!/bin/sh

echo "Enter password"
read trythis while [ "$trythis" != "secret" ]; do
echo "sorry, try again"
read trythis
done
exit

5.until语句

循环反复直到条件为真
until condition
do
    statements
done

while:循环至少执行一次
unitl:可能根本不需要执行循环

#!/bin/bash

until who | grep "$1" > /dev/null
do
sleep
done echo -e '\a' #响铃发出警报
echo "***$1 has just logged in****"
exit

6.case语句

case variable in
    pattern [ | pattern ] ...) statements;;
    pattern [ | pattern ] ...) statements;;
    ...
esac

双分号标记前一个语句的结束和后一个模式的开始

#!/bin/bash

echo "Is it morning? Please answer yes or no"
read timeofday case "$timeofday" in
yes) echo "Good Morning";;
no ) echo "Good Afternoon";;
y ) echo "Good Morning";;
n ) echo "Good Afternoon";;
* ) echo "sorry";;
esac exit
#!/bin/bash

echo "Is it morning? Please answer yes or no"
read timeofday case "$timeofday" in
yes | y | Yes | YES ) echo "Good Morning";;
n* | N* ) echo "Good Afternoon";;
* ) echo "sorry";;
esac exit
#!/bin/bash

echo "Is it morning? Please answer yes or no"
read timeofday case "$timeofday" in
yes | y | Yes | YES )
echo "Good Morning"
echo "Up bright and early this morning"
;;
[nN]*)
echo "Good Afternoon"
;;
* )
echo "sorry"
exit
;; #如果最后一个case模式是默认模式,可以省略最后一个双分号;;
#[yY] | [Yy] [Ee] [Ss])
esac exit

 7.命令列表

①AND列表

statement1 && statement2 && statement3 && ...

#!/bin/sh

touch file_one
rm -f file_two if [ -f file_one ] && echo "hello" && [ -f file_two ] && echo "there
then
echo "in if"
else
echo "in else"
fi
exit

②OR列表
statement1 || statement2 || statement3 || ...

#!/bin/sh
rm -f file_one if [ -f file_one ] || echo "hello" || echo "there"
then
echo "in if"
else
echo "in else"
fi
exit

[ -f file_one ] && command for true || command for false
如果测试成功会执行第一条命令,否则执行第二条命令

③语句块

get_confirm && {
grep -v "$cdcatnum" $tracks_file > $temp_file
cat $temp_file > $tracks_file
echo
add_record_tracks
}

 8.函数

定义:
必须在调用之前定义
function_name(){
    statements
}

#!/bin/sh
foo() {
echo "Function foo is executing"
}
echo "script starting"
foo
echo "script ended"
exit

 注意:

1.如果函数里面没有return一个值,函数返回的就是执行最后一条命令的返回码。
2.local关键字在函数中声明一个局部变量,局部变量仅在函数的作用范围内有效。
3.函数可以访问全局作用范围内的其他shell变量。
4.如果一个局部变量和一个全局变量名字相同,前者会覆盖后者,但仅限于函数的作用范围内。
5.让函数返回字符串值的常用的方法:
  1>让函数将字符串保存在一个变量中,该变量然后可以在函数结束之后被调用
  2>echo一个字符串并捕获其结果
    foo(){
        echo JAY;
    }
    ...
    result="$(foo)"

#!/bin/sh
sample_text="global variable"
foo() {
local sample_text="local variable"
echo "Function foo is executing"
echo $sample_text
} echo "script starting"
echo $sample_text
foo
echo "script ended"
echo $sample_text
exit

①参数如何传递
②函数返回值

#!/bin/sh
yes_or_no(){
echo "Is your name $*"
while true
do
echo -n "Enter yes or no:"
read x
case "$x" in
y | yes ) retrun ;;
n | no ) return ;;
*) echo "Answer yes or no";;
esac
done
} echo "Original parameters are $*"
if yes_or_no "$1"
then
echo "Hi $1, nice name"
else
echo "Never mind"
fi
exit

执行结果
$./my_name Rick Neil
Original parameters are Rick Neil
Is your name Rick?
Enter yes or no:
yes
Hi Rick, nice name

shell学习笔记之控制结构(三)的更多相关文章

  1. SHELL学习笔记三

    SHELL学习笔记一 SHELL学习笔记二 SHELL学习笔记三 for 命令 读取列表中的复杂值 从变量读取列表 从命令读取值 更改字段分隔符 用通配符读取目录 which 使用多个测试命令 unt ...

  2. [转帖][Bash Shell] Shell学习笔记

    [Bash Shell] Shell学习笔记 http://www.cnblogs.com/maybe2030/p/5022595.html  阅读目录 编译型语言 解释型语言 5.1 作为可执行程序 ...

  3. shell学习笔记

    shell学习笔记 .查看/etc/shells,看看有几个可用的Shell . 曾经用过的命令存在.bash_history中,但是~/.bash_history记录的是前一次登录前记录的所有指令, ...

  4. shell学习笔记汇总

    1.shell脚本中函数使用 函数定义在前,调用在后,顺序反了就没有效果了.函数调用为:函数名 参数列表 函数内部通过以下变量访问函数的参数:shell脚本函数中: $0: 这个脚本的名字 $n: 这 ...

  5. shell 学习笔记2-shell-test

    一.字符串测试表达式 前面一篇介绍:什么是shell,shell变量请参考: shell 学习笔记1-什么是shell,shell变量 1.字符串测试表达式参数 字符串需要用""引 ...

  6. 【Unity Shaders】学习笔记——SurfaceShader(三)BasicDiffuse和HalfLambert

    [Unity Shaders]学习笔记——SurfaceShader(三)BasicDiffuse和HalfLambert 转载请注明出处:http://www.cnblogs.com/-867259 ...

  7. SHELL学习笔记----IF条件判断,判断条件

    SHELL学习笔记----IF条件判断,判断条件 前言: 无论什么编程语言都离不开条件判断.SHELL也不例外.  if list then           do something here   ...

  8. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换 学习目标 理解如何用矩阵表示线性变换和仿射变换: 学习在 ...

  9. 【转】shell学习笔记(一)——学习目的性、特殊字符、运算符等

    1 学习shell的目的性 写之前我们先来搞清楚为什么要学shell,学习要有目的性 shell简单.灵活.高效,特别适合处理一些系统管理方面的小问题 shell可以实现自动化管理,让系统管理员的工作 ...

随机推荐

  1. tyvj 2075 借教室 题解

    P2075 [NOIP2012T5]借教室 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 noip2012-tg 描述 在大学期间,经常需要租借教室.大到院 ...

  2. Heap Spray原理

    Heap Spray定义基本描述 Heap Spray并没有一个官方的正式定义,毕竟这是漏洞攻击技术的一部分.但是我们可以根据它的特点自己来简单总结一下.Heap Spray是在shellcode的前 ...

  3. Hive配置与操作实践

    Hive配置与操作实践 @(Hadoop) 安装hive hive的安装十分简单,只需要在一台服务器上部署即可. 上传hive安装包,解压缩,将其配入环境变量. mysql的设置 在要作为元数据库的m ...

  4. 那些年困扰我们的Linux 的蠕虫、病毒和木马

    虽然针对Linux的恶意软件并不像针对Windows乃至OS X那样普遍,但是近些年来,Linux面临的安全威胁却变得越来越多.越来越严重.个中原因包括,手机爆炸性的普及意味着基于Linux的安卓成为 ...

  5. RS布局问题之块的不完美之完美

    早上一来,便传来喜讯...说我们做的报表太美.客户不敢看----于是便开启征程,亲自尝试了一把,如下面的操作,首次运行报表,在不考虑UI美观度的情况下,报表还是 在预测范围内显示的 那么接下来我们选择 ...

  6. Java程序猿面试体会,还没找到工作的“猿猿们”看过来!

    类似的话题,我大约在几个月前跟大家聊过. 这一次,我要依据这段时间的体会,再给大家整理一下.     今天,非常轻松地拿到了神州数码的offer. 尽管工资不是特别高,尽管非常多人一毕业就能进入这种公 ...

  7. vb.net Bitmap Drawing

    Public Class Form1 Dim BMP As New Drawing.Bitmap(640, 480) Dim GFX As Graphics = Graphics.FromImage( ...

  8. python 网络请求类库 requests 使用

    python 网络请求类库 requests 使用 requests是 为python封装的强大 REST 操作类库 githubhttps://github.com/kennethreitz/req ...

  9. UISearchBar cancel 按钮设置文本

    主要是在 UISearchDisplayDelegate中更改: - (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayCont ...

  10. ObjectMapper处理从远程获取的Object对象 (http://bbs.csdn.net/topics/390337813?page=1)这个网址也有讲解

    微服务中从其他服务获取过来的对象,如果从Object强转为自定义的类型会报错,利用ObjectMapper转换. ObjectMapper mapper = new ObjectMapper(); D ...