case判断

前面了解了shell编程的if判断,其实除了if判断,还有case判断。

case语法:

case VAR in

case1) command1 ;;

case2) command2 ;;

case3) command3 ;;

...

*) command ;;

esac

循环

除了判断,大家知道循环也是程序中很重要的一环,那么shell里面的循环是什么样的呢?

带列表的for循环

和python中类似,此类for循环语法结构为

for var in list:

do

    command

done

list可以是一串字符,程序会按照空格分隔成多个单词的列表

list也可以是1,2,3,4,5这样的数字

也可以是某个命令执行后的结果:

类C语言的for循环

语法:

for ((expression1;condition;expression2))

do

    command

done

这种情况和C语言的for循环类似,只是有两个小括号。例如

好,说到这里,我们又可以做一个经典的问题了:打印出9X9乘法口诀表

其中echo -e 表示开启转义  \c 表示不换行 \n 表示换行。

上面这幅图应该让大家知道有什么作用了。

我们看打印的乘法口诀,发现有点没有对齐,这对强迫症来说,可能无法忍受,怎么办呢?其实在shell中,我们除了echo可以打印之外,还可以用printf 这种C语言的打印方法

大家发现没有 printf默认没有换行,这就很不爽了。我们可以在打印末尾加上\n

和其他语言一样,我们可以在%s这里设置字符串的宽度、左右对齐方式等

前面负号表示左对齐,8表示一个占多少格,后面的.4表示要展示多少位,小数点也算一位

好,现在我们再改良一下我们的乘法口诀

while循环

基本用法:

while expression

do

  command

done

另外,while循环还可以用来读取文件

awk指令的作用后面会说。

上面的while循环这样写也是OK的

<  表示重定向输入,就是把test.sh当作前面指令的输入。

select循环

select循环是一种菜单扩展循环,语法和带列表的for类似,常和case一起连用

语法规则:

select menu in list

do

    command

done

其中 &&表示接着执行后面的语句 exit 1表示退出脚本,如果是break,就是退出循环,continue指跳过本轮循环,继续执行。

函数

Shell中的相比于Python的函数,要简单很多,同时功能也就简单很多

函数定义语法

#funciton为关键字,可以省略
function FUNCTION_NAME(){
    command1 #函数体中可以有多个语句,不允许函数内部为空
    command2
    ……
}

Shell中的向函数传递参数是通过位置参数来实现的

函数的作用就是减少重复代码,因此我们需要建立自己的函数库

新建一个Shell脚本,专门用来存放自定义的函数,一般作为函数库里面的函数以下划线开头,以便区分

通过source 或者 . 都可以导入函数库

重定向

之前我们都用echo来输出,但是如果我们想把输出内容保存到文件中该怎么做呢?

>

标准输出覆盖重定向:将命令的输出,重定向输出到其他的文件当中

>>

标准输出追加重定向:将命令的输出,重定向追加到其他文件末尾

<

标准输入重定向:命令将从指定的文件中读取输入而不是键盘输入

命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

shell编程(二)的更多相关文章

  1. linux运维、架构之路-shell编程(二)

    一.流程控制语句 1.if语句 ①if单分支:一个条件一个结果 1 2 3 4 if 条件   then      命令 fi ②if双分支:一个条件两个结果 1 2 3 4 5 6 if 条件    ...

  2. Shell编程(二)——shell的基础知识及常用命令

    shell的基础知识 一.bash有以下特点: 1.记录命令历史 2.指令和文件名补全 3.别名 alias rm='rm -i' 4.通配符 * 0个或多个字符 ?​匹配一个字符 5 输入输出重定向 ...

  3. Linux上天之路(十七)之Shell编程二

    一.shell常用工具 grep 1.作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Exp ...

  4. Linux Shell编程二

    以"``"符号包含的内容不是字符串,而是代表这是一个shell命令. echo "today is" `date` 前面是字符,后面`date`表示执行date ...

  5. Shell编程二

    告警系统需求分析 1.(虽然之前我们学习了zabbix,但有时候也不能满足我们的需求,比如比较冷门的监控项目需要写自定义脚本,或者服务器网络有问题,没有办法将客户端的数据发送到服务端.) 程序架构: ...

  6. shell编程(二)之算术运算

    bash中的算术运算 +.-./.%.* 实现算术运算 1. let var=算术表达式 2. var=$[算术表达式] 3. var=$((算术表达式)) 4. var=$(expr arg1 ar ...

  7. 【shell】shell编程(一)-入门

    如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux.说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的很简单.背景 什么是shell编程 ...

  8. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  9. (C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令

    原文(C#)Windows Shell 编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:( ...

随机推荐

  1. kindeditor在Java项目中的应用以及图片上传配置

    在官网下载Kindededitor的开发包   在项目中javaweb项目中导入kindeditor必须要使用的Jar包(用于文件上传,除非你的富文本编辑器不使用图片上传)jar包可以在官网的开发包中 ...

  2. JAVA基础之multipart,urlencoded以及JSON

    一.(enctype) 表单的默认编码方式  ajpplication/x-www-form-urlencoded 上传文件的编码方式  multipart/form-data 互联网应用常用编码   ...

  3. SignalR循序渐进(二)泛型Hub

    接上一篇,文章末尾抛出了2个问题: 能不能让客户端声明一个强类型的方法列表呢?这样首先不容易写错. 同样的,能不能让服务端声明一个强类型的方法列表给客户端调用呢? 如果要让客户端的方法以强类型出现在服 ...

  4. 20165330 2017-2018-2 《Java程序设计》第8周学习总结

    课本知识总结 第十二章 Java多线程机制 Java中的线程 进程:是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个完整过程 线程:一个进程在其执行过程中,可以产生多个线程,形成多条 ...

  5. Convolution Matrix

    w褶积矩阵.二值化旧图经核矩阵得到新图. https://docs.gimp.org/en/plug-in-convmatrix.html 8.2. Convolution Matrix 8.2.1. ...

  6. smp,numa,mpp,umam,olap,dss,oltp,greenplum,presto

    SMP.NUMA.MPP体系结构介绍 从系统架构来看,目前的商用服务器大体可以分为三类,即对称多处理器结构 (SMP : Symmetric Multi-Processor) ,非一致存储访问结构 ( ...

  7. Apache Kafka Replication Design – High level

    参考,https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Replication Kafka Replication High-level ...

  8. window7修改hosts文件

    以管理员身份登录系统 ,修改 C:\Windows\System32\drivers\etc\hosts文件, 在最下面加入类似 192.168.80.10 master192.168.80.11 s ...

  9. javaweb前后台中文参数乱码

    一.描述 从前台传中文参数到后台,发现中文乱码. 二.解决 首先,统一所有文件为utf-8格式. 其次,在传参时,使用js的encodeURI函数,对参数进行编码. 然后一定要对该中文参数进行两次编码 ...

  10. c++拷贝构造函数,深拷贝,浅拷贝,对象内存

    https://blog.csdn.net/lwbeyond/article/details/6202256 防止默认拷贝发生 通过对对象复制的分析,我们发现对象的复制大多在进行“值传递”时发生,这里 ...