第四章 shell程序设计I-入门

一、shell脚本的基本概念

shell脚本(script)是一个可执行的纯文本文件,有多个shell命令组成。

命令的执行时从上而下、从左而右的分析和执行

命令、参数间的多个空白都会被忽略

空白行以及[tab]键所致的空白也会被忽略

读取到第一个[enter]符号即开始执行命令

如果脚本中需要换行则需用\[enter]转义

#是注释,任何加在#符号后的命令及文本全部被视为注释

#!用于指定本shell script使用的shell名称

shell脚本一般以.sh为后缀名

二、shell脚本的执行方法

1.直接命令行执行

必须拥有shell脚本文件的可读和可执行权限(rx)

路径要正确:a.绝对路径    /home/dmtsai/myscript.sh

b.相对路径    ./myscript.sh

c.通过变量PATH    将myscript.sh放在PATH指定的目录下

2.以bash进程执行

只要拥有shell脚本文件的可读权限(r)

# bash myscript.sh

或# sh myscript.sh

type:查看命令的类型   -t:会显示可能的三种情况:file---外部命令、alias-----命令的别名、builtin-----内置的命令功能

-a:将系统PATH定义的路径中所有含xxx名称的命令都列出来

echo、unset:变量的显示与设置

env、export:环境变量的相关操作

read:变量的输入

declare/typeset:数组与声明

三、脚本中变量的使用

1.变量的显示与设置

使用echo命令显示变量的值:

# echo $变量名

# echo ${变量名}

设置变量:# 变量名=变量值

取消变量:# unset 变量名

2.环境变量功能

env:查看环境变量

set:查看所有变量:包括环境变量和自定义变量(主要区别:作用域不用)

环境变量在整个bash运行过程中有效,自定义变量只在当前进程中有效

export:将自定义变量转化为环境变量

# export 变量名

3.从键盘读取变量值

read:从键盘读取变量值,和用户交互,在shell script中经常使用

# read [-pt] 变量名   -p:后面接提示语句

-t:后面接等待的秒数

4.声明变量类型

使用declare或typeset能声明变量的类型

# declare [-aixr] 变量名   -i:声明为整型

-x:声明为环境变量

四、数据流重定向和管道

1.数据流重定向

标准输入(stdin):代码为0,符号为<或<<

标准输出(stdout):代码为1,符号为>或>>

标准错误输出(stderr):代码为2,符号为2>或2>>

将数据从指定的流输入或输出,就称为数据重定向

标准输出流stdout默认情况下将数据输出到device

使用>将数据输出重定向到文件

>默认为覆盖文件内容,如果要追加则用>>

2>:已覆盖的方式将错误信息输出到指定文件或设备上

/dev/null:将错误信息忽略,及输出到黑洞

<:标准输入流默认从键盘输入

<<:用于设定结束输入的关键字

2.管道

管道命令的界定符号为“|”

管道命令仅会处理stdout,对stderr会忽略

管道命令必须要能够接收来自前一个命令的数据作为stdin

选取命令cut、grep

cut:将同一行的数据进行分解  -d:后面接分隔字符,与-f一起使用

-c:以字符的单位取出固定字符区间

-f:依据-d将一段信息分隔,-f指定取哪一段

cut是从一行中取出部分信息,grep是按条件取出某行

排序命令:sort、wc、uniq

sort:用于对输入内容进行排序

uniq:用于取出结果中的重复行

wc:用于统计字、字符、行   -l:仅列出行

3.双向重定向

tee:能将数据流同时输出到文件与屏幕   -a:以追加的方式将内容输出到文件

printf:文件的格式化输出命令

第五章 shell程序设计II-进阶

一、shell脚本的经典案例

二、结构化控制语句的使用

if-then语句

1.if [表达式]; then

语句

fi

2.if [表达式]; then

语句

else

语句

fi

3.if [表达式]; then

语句

elif

语句

else

语句

fi

case。。。esac语句

1.case $变量名 in

“变量值”)

语句

;;

“变量值”)

语句

;;

*)

语句

;;

esac

while循环

1.while [ 条件表达式 ]

do

语句

done

2.until [ 条件表达式 ]

do

语句

done

for循环

1.for 变量名 in value1 value2 value3

do

语句

done

2.for ((初始值;终止条件;执行步长))

do

语句

done

三、函数的使用

function 函数名()

{

程序段

}

#调用函数语法为:

函数名

四、脚本的调试

sh:支持对脚本的语法检查和调试

# sh [-nvx] scripts.sh

Linux 复习四的更多相关文章

  1. Linux下四款常见远程工具比较

    摘要:Linux远程可不像Windows下那么方便,主要是连接的速度.显示的画质不能令人满意(延迟.撕裂).本文只是说一下我用过的四款远程工具.Anydesk官网:https://anydesk.co ...

  2. 学习linux/unix编程方法的建议,学习Linux的四个步骤(转)

    解答:学习Linux的四个步骤假设你是计算机科班出身,计算机系的基本课程如数据结构.操作系统.体系结构.编译原理.计算机网络你全修过我想大概可以分为4个阶段,水平从低到高从安装使用=>linux ...

  3. linux复习

    linux的特点           - 免费的/开源           - 支持多线程/多用户           - 安全性好           - 对内存和文件管理优越       关机命令 ...

  4. Linux 复习重点目录

    Linux安全复习 一.Linux基本命令 1.文件管理命令 lvm 2.用户管理命令 3.网络管理命令 4.权限管理 普通权限和特殊权限 权限命令修改 5.服务命令 6.软件安装管理命令 yum安装 ...

  5. Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

    一.http_load程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把 ...

  6. Linux第四次学习笔记

    程序的机器级表示 寻址方式的演变 DOS → 8086 → IA32 Inter处理器系列俗称x86,其演变过程(根据其所需要的晶体管数量来说明): 8086 → 80286 → i386 → i48 ...

  7. linux第四次读书笔记

    第四章:进程调度 一.多任务 1.非抢占式多任务 进程会一直执行直到自己主动停止运行(这一步骤称为让步) 2.抢占式多任务 Linux/Unix使用的是抢占式的方式:强制的挂起进程的动作就叫做抢占.进 ...

  8. 【实践报告】Linux实践四

    Linux内核分析 实践四——ELF文件格式分析 一.概述 1.ELF全称Executable and Linkable Format,可执行连接格式,ELF格式的文件用于存储Linux程序.ELF文 ...

  9. linux第四章笔记

    第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统. 最大限度利用处理器时间的原则:只要有可以执行 ...

随机推荐

  1. Java游戏之碰撞检测

    在进行Java游戏开发时,我们经常会遇到碰撞检测的问题.如坦克大战中,炮弹与坦克相遇发生爆炸:守卫者游戏中,守卫者发射的箭与怪物相遇使怪物失血:打飞机游戏中,飞机发送的子弹与敌机相遇干掉敌机.这些都需 ...

  2. 29. ExtJs - Struts2 整合(1) - 登录页面

    转自:https://yarafa.iteye.com/blog/729197 初学 ExtJS,在此记录下学习过程中的点点滴滴,以备不时只需,也希望能给跟我一样的菜鸟一些帮助,老鸟请忽略.如有不当之 ...

  3. bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级【分层图+spfa】

    至死不用dijskstra系列2333,洛谷上T了一个点,开了O2才过 基本想法是建立分层图,就是建k+1层原图,然后相邻两层之间把原图的边在上一层的起点与下一层的终点连起来,边权为0,表示免了这条边 ...

  4. bzoj 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛【树形dp】

    设f[u][0/1]为u这个点不选/选,转移的时候从儿子转移,f[u][1]=sum(f[son][0])+1,f[u][0]=sum(max(f[son][0],f[e[i].to][1])) #i ...

  5. SpringBoot集成MybatisPlus解决Mapper文件修改后动态刷新的问题

    很多人在使用SpringBoot集成Mybatis或者MybatisPlus的时候在查询复杂的情况下会写mapper文件,虽然说MyBatisPlus提供了常用的增删查改,但还是难以应付复杂的查询.关 ...

  6. 基于.Net Core的API框架的搭建(2)

    4.加入数据库支持 下面我们为项目加入数据库支持,修改appsettings.json: 然后我们要生成实体类,打开VS工具->NuGet包管理器->程序包管理器控制台: 输入命令: Sc ...

  7. [NOIP2004]火星人

    Description 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法.这种交流方法是这样的,首先,火星人把一个非常大的数 ...

  8. svn报错:Cannot negotiate authentication mechanism

    在使用eclipse的svn插件连接osc的代码仓库时候,发生了以下错误: Cannot negotiate authentication mechanismsvn: Unable to connec ...

  9. mysqlbinlog(日志管理工具)

    mysqlbinlog用于处理二进制的日志文件,如果想要查看这些日志文件的文本内容,就需要使用mysqlbinlog工具. 1.mysqlbinlog命令的语法 shell > mysqlbin ...

  10. 263 Ugly Number 丑数

    编写程序判断给定的数是否为丑数.丑数就是只包含质因子 2, 3, 5 的正整数.例如, 6, 8 是丑数,而 14 不是,因为它包含了另外一个质因子 7.注意:    1 也可以被当做丑数.    输 ...