参考文献 Shell 教程
MAC常用终端命令行
Mac下Shell脚本使用

(7)Shell echo命令:

命令格式:echo string

①显示普通字符串:echo "It is a test"(这里的双引号完全可以省略)

②显示转义字符:

#!/bin/sh
echo "\"It is a test\"" #同样,双引号也可以省略

结果为:"It is a test"

③显示变量(read命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量):

#!/bin/sh
read name
echo "$name It is a test"

结果将是:

OK                     #标准输入
OK It is a test #输出

④显示换行(-e 开启转义)

echo -e "OK! \n" # -e 开启转义
echo "It is a test"

⑤显示不换行

#!/bin/sh
echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"

⑥显示结果定向至文件:

echo "It is a test" > myfile #文本名

⑦原样输出字符串(不进行转义或取变量(用单引号))

⑧显示命令执行结果:

echo `date` #结果将显示当前日期

注意: 这里使用的是反引号, 而不是单引号 。

(8)Shell printf 命令:

printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认 printf 不会像 echo 自动添加换行符,我们可以手动添加\n。printf 命令的语法:printf <格式控制字符串> [参数列表]

格式控制字符串为双引号、单引号,也可不加。若格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用。

如果没有[参数列表],那么 %s 用NULL代替,%d 用 0 代替。

printf的转义序列与c语言类似。

(9)Shell test 命令:

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

①数值测试

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

例如:

num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi

②字符串测试

参数 说明
= 等于则为真
!= 不相等则为真
-z 字符串 字符串的长度为零则为真
-n 字符串 字符串的长度不为零则为真

③文件测试

(10)Shell 流程控制:

和c等语言不一样,sh的流程控制不可为空,在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个else。

①if

if 语句语法格式:

if <condition>
then
<command1>
<command2>
...
<commandN >
fi

末尾的fi就是if倒过来拼写,后面还会遇到类似的。

②if else

if else 语法格式:

if <condition>
then
<command1>
<command2>
...
<commandN>
else
<command>
fi

③if else-if else

if else-if else 语法格式:

if <condition1>
then
<command1>
elif <condition2>
then
<command2>
else
<commandN>
fi

if else语句经常与test命令结合使用。[ ]

④for

for循环一般格式为:

for <变量名> (in) <item1 item2 ... itemN>
do
<command1>
<command2>
...
<commandN>
done

还有一种格式与c语言相似,但有一定但区别:

for (( loop=1;loop<=5;loop++ ))
do
    echo "The value is: $loop"
done

当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可以包含替换、字符串和文件名。in列表是可选的,如果不用它,for循环使用命令行的位置参数。

⑤while

其格式为:

while <condition>
do
<command>
done

注意:while中的条件不与test命令结合使用!!(( ))

#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done

以上实例使用了 Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $来表示变量(语法格式:let arg [arg ...]

while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按结束循环。

echo '按下 <CTRL-D> 退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
echo "是的!$FILM 是一个好网站"
done

⑥无限循环

无限循环语法格式:

while :
do
<command>
done

或者

while true
do
<command>
done

或者

for (( ; ; ))

⑦until 循环

until 循环执行一系列命令直至条件为 true 时停止。until 循环与 while 循环在处理方式上刚好相反。一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

until 语法格式:

until <condition>
do
<command>
done

condition 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

⑧case (与c的switch语句类似)

case语句格式如下:

case 值 in
模式1)
<command1>
<command2>
...
<commandN>
;;
模式2)
<command1>
<command2>
...
<commandN>
;;
esac

取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式(与c不同点)。如果无一匹配模式,使用星号 *(个人认为等同于default) 捕获该值,再执行后面的命令。

例:

#!/bin/bash
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac

⑨break

⑩continue

⑪case ... esac

case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;;表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。

case ... esac 语法格式如下:

case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac

case 后为取值,值可以为变量或常数。值后为关键字 in,接下来是匹配的各种模式,每一模式最后必须以右括号结束,模式支持正则表达式。

(11)Shell 函数:

shell中函数的定义格式如下:

[ function ] funname [()]
{
action;
[return int;]
}

说明:

  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n。
  • 所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
  • $10不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数
  • $?仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过$?获得。$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

(12)Shell 文件包含重定向

Shell 文件包含的语法格式如下:

. filename   # 注意点号(.)和文件名中间有一空格
#或
source filename

Mac下Shell脚本使用学习笔记(二)的更多相关文章

  1. Mac下Shell脚本使用学习笔记(一)

    参考文献 Shell 教程 MAC常用终端命令行 Mac下Shell脚本使用 1.使用终端创建test.sh: (1)进入指定文件夹路径(命令示例:cd Desktop/面向对象程序设计): (2)创 ...

  2. Shell脚本的学习笔记二:字符串

    菜鸟教程提供的Shell在线编辑器 Shell 字符串 项目 功能 单引号 原样输出,变量无效.但可用成对单引号嵌套成对单引号输出变量 双引号 定义字符串中附带有变量的命令并且想将其解析后再输出的变量 ...

  3. Shell脚本的学习(二)

    Shell脚本的学习(二) 方法: 1) 一个计算器: 2)递归实现打印目录    3)方法调用

  4. linux shell攻略学习笔记二

    1.Cat命令 这么多命令,常用的 Cat –n file  显示文件以及行数 Cat - echo 'Text through stdin' | cat - file.txt Text throug ...

  5. Shell脚本的学习笔记一:变量

    三种变量: 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需 ...

  6. Linux Shell脚本编程学习笔记和实战

    http://www.1987.name/141.html shell基础 终端打印.算术运算.经常使用变量 Linux下搜索指定文件夹下特定字符串并高亮显示匹配关键词 从键盘或文件里获取标准输入 [ ...

  7. shell脚本编程学习笔记(二)linux服务器启动流程

    一.linux服务器启动流程 1.bios找到磁盘上的mbr主引导扇区 2.进入grub洁面选择相应的启动内核 3.读取kernel内核文件-/boot/vmlinuz-* 4.读取init的镜像文件 ...

  8. shell脚本编程学习笔记(一)

    一.脚本格式 vim shell.sh #!/bin/bash //声明脚本解释器,这个‘#’号不是注释,其余是注释 #Program: //程序内容说明 #History: //时间和作者 二.sh ...

  9. Shell脚本编程基础笔记二

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8177697.html 一:输入 1:运行时参数 可以在启动脚本时,在其后输入参数. ./脚本 参数1 参数2. ...

随机推荐

  1. 基于预计算的全局光照(Global Illumination Based On Precomputation)

    目录 基于图像的光照(Image Based Lighting,IBL) The Split Sum Approximation 过滤环境贴图 预计算BRDF积分 预计算辐射度传输(Precomput ...

  2. WebMagic 爬虫技术

    WebMagic WebMagic 介绍 WebMagic基础架构 Webmagic 的结构分为 Downloader.PageProcessor.Scheduler.Pipeline四大组件,并由 ...

  3. 设置 SSH 命令行空闲保持会话

    楔子 使用 Mac 或 Linux 原生的命令行 ssh user@ip 方式连接 Linux 闲时会自动断开终端卡死. 为解决这个问题,查了到篇博客翻译下关键步骤记录下来.解决方式可以分服务端设置和 ...

  4. java集合类之LinkedList

    概述 a, 我们知道LinkedList它的数据存储方式是双向链表,基于链表存储的特性, LinkedList具有查询较慢(顺序访问)但增加/删除较快(虽然要遍历到指定位置, 但是相对于数组存储来说不 ...

  5. 工作3年的Java程序员,轻松拿到阿里P6Offer,只因为他搞明白了Redis这几个问题!!

    Redis中的多路复用模型 Redis6用到了多线程?那多线程应用在哪些地方,引入多线程后,又改如何保证线程安全性呢? 同时,如何在性能和线程安全性方面做好平衡? 关于Redis的单线程模型 在Red ...

  6. 八大排序算法之基数排序(python实现)

    [写在前面] 参考文章: https://blog.csdn.net/nrsc272420199/article/details/82691596[给出的示例图,简单易懂,但是对于没一轮循环没有讲解的 ...

  7. SyntaxError: Non-UTF-8 code starting with '\xbb' in file D:\流畅学python\ex32.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

    1. 报错如下: SyntaxError: Non-UTF-8 code starting with '\xd3' in file D:\流畅学python\ex34.py on line 4, bu ...

  8. 【c++ Prime 学习笔记】第6章 函数

    6.1 函数基础 函数定义包括:返回类型.函数名字.由0个或多个形参组成的列表以及函数体 通过调用运算符()来执行函数,它作用于一个表达式,该表达式是函数或函数指针.圆括号内是一个逗号隔开的实参列表, ...

  9. [Git系列] 前言

    Git 简介 Git 是一个重视速度的分布式版本控制和代码管理系统,最初是由 Linus Torvalds 为开发 Linux 内核而设计并开发的,是一款遵循二代 GUN 协议的免费软件.这一教程会向 ...

  10. Scrum Meeting 0427

    零.说明 日期:2021-4-27 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成部分登录,注 ...