shell 程序设计

主要的学习内容包含基本思路,语法:变量、条件判断和程序控制,命令列表,函数,命令及执行,调试,grep命令和正则表达式,find命令

什么是shell

适用编写执行相对简单任务的小工具。

linux系统中,标准shell是GNU工具集中bash(GNU Bourne—Again Shell)。查看bash版本号

/bin/bash --version

管道和重定向

  • 重定向输出> ls -1 > lsoutput.txt

把ls命令的输出保存到文件lsoutput.txt中

其中参数 -1代表文件描述符,0代表程序的标准输入,1代表标准输出,2代表错误输出。> 把标准输出重定向到一个文件,覆盖已经有的文件

ps >> lsoutput.txt

其中>>表示把输出内容附加到文件后

把标准输出和标准错误输出都重定向到一个文件中,用>&来结合两个输出

kill -1 1234 >killouterr.txt 2>&1

  • 管道

利用管道操作符|来连接进程。通过管道连接的进程可以同时运行,并且随着数据流在它们之间的传递可以自动的进行协调

ps -xo comm | sort | uniq | grep -v sh |more

这一命令按照字母顺序排序ps命令的输出,接着用uniq去除相同名字的进程,然后用grep -v sh删除sh的命令,最后将结果显示在屏幕上。

程序设计语言的shell

  • 交互式程序

即在命令行上直接输入shell脚本。要继续输入时$就变成了>,由shell判断何时输入完毕并执行脚本程序

  • 创建脚本
  1. 用文本编辑器创建一个脚本 first2. 运行脚本的方式有两种
  • /# !后面的参数指的是用来执行本文件的程序。

  • /bin/sh first

  • chmod +x first first(shell的环境变量PATH为要在当前目录下查找要执行的命令)或者./first(建议使用)

shell的语法

变量

特点是

  1. 使用时不需要做出声明,使用时同时创建。
  2. 区分大小写
  3. 通过在变量名前加$来访问。然后通过echo来显示。

例子 引号以及read的使用 variable

# !bin/sh

myvar="Hi there"

echo $myvar echo "$myvar" echo '$myvar' echo $myvar

read myvar echo $myvar

输出为 Hi there Hi there $myvar $myvar

在变量前面加$能显示变量的内容,使用双引号不影响变量的替换,使用单引号和\不进行变量的替换,用read从用户处读入一个字符串。

环境变量

$HOME : 当前目录的家目录

$PATH: 用冒号分隔用来搜索命令的目录列表

$PS1:

$0:脚本名字

$#:传递给脚本的参数个数

$$:脚本的进程号

$1,2,3:脚本的参数

条件

  • test []:shell的布尔判断命令

    if [-f fred.c]

then

.....

fi
  • test 可以使用的条件类型:字符串比较,算术比较和文件有关的测试

-d file :文件是否为目录

-e:存在

-f:普通文件

控制结构

  • if then elif then fi.

``if condition

then

statements

elif

statements

else

statements

fi
  • for .. in .. do done

  • while do done

    #!/bin/sh

    echo "password"

    read password

    while [ "$password" != "secret" ]

    do

    echo "sorry,try again"

    read password

    done

    exit 0

  • 常用写法 while [ ]; do

  • until

until ..do :循环根据就不需要执行采用util,至少执行一次采用while

  • case
  • 命令列表

将几条命令连接成一个序列,执行某个语句之前同时满足好几个条件

  1. AND列表

    state1 && state2 && state3

    从左到右顺序执行每条命令,只有前一条返回true,它下一条命令才执行。

  2. state1 || state2 || state3

函数

function_name() {

statements

}

命令

  • break:用于跳出当前循环,只跳出一层循环

  • :命令是一个空命令,用来简化逻辑,相当于true的别名。

while :相当于 while true

: ${var:=value}

  • .命令

    ../shell_script 用于在当前shell中执行命令
  • eval 命令

    像个额外的$,给出一个变量值的值
  • exec命令

    将当前shell替换为一个不同的程序
  • export 命令

    一旦一个变量被shell导出,它可以被该shell调用的任何脚本使用,也可以被后续依次调用的任何shell使用

linux

  • expr 命令

将它的参数当作一个表达式来求值 可以用$()来替换

  • printf 命令

  • set命令

    作用为为shell脚本设置参数变量。

  • shift

把所有参数变量左移一个位置,使$2变成$1

下面代码实现依次扫描所有的位置参数

\#!/bin/sh
while [ "$1" != "" ]; do
echo "$1"
shift
done
exit 0
  • trap命令

    用于指定在接收到信号后要采取的行动。

    用法: trap command signal

    command:接收到信号后要采取的行动。

    signal:要处理的信号名。
  • unset命令

    用于从环境中删除变量或函数。

正则表达式极其相关的命令

  • find 命令

    find的完整语法格式:

    find [path] [options] [tests] [actions]

    path :可以选择绝对路径也可以选择相对路径。

    使用操作符和圆括号的find命令

    比如在当前目录下找出文件中比test_for 更新并且以test_为后缀的文件

例1.

find . \( -name "test_*" -and -newer test_for \) -type f -print

命令解释:用\转义(),因为()在shell里面有特殊含义,用-and来连接两个测试(-or 或 -not )

例2.

find . -newer test_for -type f -exec ls -l {} \;

命令解释:-exec 执行一条命令,读取参数直到;为止,{}是-exec的参数,它被当前文件的完整路径取代。

  • gerp命令

    grep(General Regular Expression Parser )

    find 用来在系统中搜索文件,而grep命令在文件中搜索字符串。

    grep [options] PATTERN [FILES]

Linux shell 程序设计的更多相关文章

  1. Linux 的使用基础---Shell程序设计

    Shell是Linux系统中的一个重要的层次,它是用户与系统交互作用的界面.Shell除了作为命令解释程序以外,还是一种高级程序设计语言.利用Shell程序设计语言可以编写出功能很强.但代码简单的程序 ...

  2. Linux程序设计之shell程序设计

    看了<linux程序设计(第4版)>(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译).做个笔记,以备后面查看. 首先,清楚几个概念. shell编程属 ...

  3. Linux Shell 工作原理

    Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序.它不属于内核部分,而是在核心之外,以用户态方式运行.其基本功能是解释并执行用户打入的各种命令,实现用户与Linux核心的接口.系 ...

  4. linux shell sleep/wait(转载)

    linux shell sleep/wait(转载) 2007-04-27 18:12 bash的基本配置是由配置文件组成的./etc/profile称之为shell的全局配置文件.另外一个文件在个人 ...

  5. linux shell 正则表达式(BREs,EREs,PREs)差异比较

    linux shell 正则表达式(BREs,EREs,PREs)差异比较 则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符 串的单个字符串.在很多文本编辑器或其他工具里 ...

  6. Linux Shell 简介

    什么是 Shell Shell 是用户和 Linux 内核之间的接口程序,当从 Shell 或其他程序向 Linux 传递命令时,内核会做出相应的反应: Shell 是一个命令语言解释器,它拥有自己内 ...

  7. Linux shell (6)

    1.linux shell函数: 将一组命令集或语句形成一个可用的块,这些语句块成为函数. 2.shell 函数的组成:  函数名:函数的名字,注意一个脚本中函数名要唯一,否则会引起调用函数紊乱  函 ...

  8. Linux shell(5)

    shell程序流程控制的三大结构: 1. 顺序结构 2.选择结构 3.循环结构 顺序结构的定义: 顺序结构的程序设计是最简单的一种结构,它的执行顺序自上而下,依次执行,因此,我们只要按照解决问题的思路 ...

  9. linux shell 正则表达式(BREs,EREs,PREs)的比较

    原文 :   linux shell 正则表达式(BREs,EREs,PREs)差异比较 在使用 linux shell的实用程序,如awk,grep,sed等,正则表达式必不可少,他们的区别是什么 ...

随机推荐

  1. Lua中的常用语句结构以及函数

     1.Lua中的常用语句结构介绍 --if 语句结构,如下实例: gTable = {} ] ] then ]) == gTable[] then ]) else print("unkown ...

  2. JS 拖动原理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. spark 系列文章汇总

    源码导读 spark 源码导读1 从spark启动脚本开始 spark 源码导读2 进一步窥探Master.Worker启动及通信机制 spark 源码导读3 进一步理解脚本调用关系 spark 源码 ...

  4. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  5. Canvas组件:画布,可以实现动画操作

    Canvas组件:画布,可以实现动画操作. TextArea:文本域. 在单行文本域中回车会激发ActionEvent. 用CheckBoxGroup实现单选框功能. Java中,单选框和复选框都是使 ...

  6. C# 压缩和解压文件(SharpZipLib)

    先从网上下载ICSharpCode.SharpZipLib.dll类库 将文件或文件夹压缩为zip,函数如下 /// <summary> /// 压缩文件 /// </summary ...

  7. ItcastOA_整体说明_准备环境

    1. 整体说明 1.1. 项目说明 1.1.1. OA概述 OA是Office Automation的缩写,本意为利用技术的手段提高办公的效率,进而实现办公的自动化处理.实现信息化.无纸化办公,可方便 ...

  8. UE4 Multiplayer多人局域网LAN联机打包参数设置

    需要注意几点: A. 建好后我们先到项目根目录,在Config文件夹中的DefaultEngine.ini文件加上两行: [OnlineSubsystem]  DefaultPlatformServi ...

  9. 在 Linux 下使用任务管理器

    有很多 Linux 初学者经常问起的问题,“Linux 有任务管理器吗?”,“怎样在 Linux 上打开任务管理器呢?” 来自 Windows 的用户都知道任务管理器非常有用.你可以在 Windows ...

  10. phpcms V9内容页调用标签

    1.页面标题:{$title} 2.发表时间:{$inputtime} 3.内容来源:{$copyfrom} 4.文章内容:{$content} 5.缩略图地址:{$thumb} 6.组图列表: {l ...