看了《linux程序设计(第4版)》(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译)。做个笔记,以备后面查看。

  首先,清楚几个概念。

  shell编程属于脚本编程,脚本文件就是指令的集合,GCC是GNU编译系统驱动程序。

  Linux中的库分两种:静态库和共享库。静态库以.a结尾,也叫归档文件(archive),类似于windows中的.lib文件,他的缺点是同时运行的多个程序使用同个函数库函数时,内存中会有多个该函数及该程序文件的副本,浪费了内存。共享库以.so结尾,类似于windows中的.Dll文件。

  shell是对linux内核的一种封装,提供了一些函数的接口,shell程序设计就是利用这些函数接口进行编程。

  一般linux系统的shell装的是bash(Bourne Angain Shell),安装为/bin/sh,可以用$/bin/bash --version命令查看bash版本号:

重定向

  重定向有重定向输入和重定向输出,似乎重定向输出用的比较多,可以将默认输出到屏幕上的内容重定向输出到一个文档中,eg:

也可以用>>将内容追加的重定向到已有的文件中,eg:

重定向输入使用<符号

管道

管道的作用是可以让进程进行通信,这样一个进程的结果就可以作为另一个进程的操作对象,比如说想对ps列出的进程列表进行sort排序,然后分屏输出,就可以使用命令:ps | sort  more

通配符

通配符可以匹配字符串、单个字符等

*:表示任意字符串

?:表示任意单个字符

[]:[]中可以添加任意的字符

[^ ]:表示不匹配[]里面的字符

{}:中添加的是字符串

创建脚本

可以使用vim编辑脚本文件,使用bash的话脚本文件的首行是:#!/bin/sh 声明语句。

linux中的变量不用声明类型,系统默认是字符串型,当时数值时,系统会自动转变类型,使用“$”+变量名,可以访问变量内容。要想输出空格,要用“”括起来,否则空格会被会略。

可以使用read操作将命令行下用户输入的内容赋值给指定的变量。

“”    ‘’  \  对变量操作的区别:

“$变量名”输出的是变量的内容,

‘$变量名’    \$变量名输出的是变量名本身,也就是说他们两个去掉了$的作用。

注意创建完脚本文件后需要把该文件的执行权限加上,命令为:chmod +x  文件名

在环境变量中,IFS表示输入域分隔符,用户可以将空格、制表符、换行符赋值给他,然后当shell读取输入时就可以安装IFS的值分隔单词,eg:

可以看出“$@”是不受IFS影响的,"$*"则受IFS影响。

布尔命令:test或者[]

条件语句后面跟的条件可以放在test或者[]中

模板为:if test 条件                        if [  条件 ]  要注意[]和条件语句之间要有空格隔开,并且等号左右都要有空格

    then                                then

      执行语句                               执行语句

    fi                                       fi

比较的条件可以有字符串、算术、文件相关测试,一下三个表都来自于《linux程序设计(第4版)》

if语句

每组if语句都要使用fi做结束标志,eg:

if 条件                        if 条件1

then                            then

  语句1                          语句1

else                         elif 条件2

  语句2                      then    

                              语句2

fi                          else

                                语句3

                           fi

for语句

for语句一般针对于字符串

模板: for 变量名 in 值的范围(一般为字符串)

    do

      语句

   done

while语句和until语句

while和until语句的区别是:

while语句至少执行一次,而until语句则不一定;while是条件为真时执行循环体,until是当条件不成立时执行循环体(如果判断某个用户登录的话用until语句比较合理)

模板:while(until)条件

   do

      语句

   done

case语句

case语句的每个条件成立后执行语句体结束时一定要记得用两个;;表示结束,用esac表示case语句的结束

模板:case 变量名 in

   值1) 语句体1

      语句体2;;

   值2) 语句体3;;

    ······

esac

exit 0

判断条件的连接可以用AND:&&或者是OR:||,用法和c语言是一样的。

函数:

函数不用声明返回值类型,直接可以用:

  函数名(){

}

来定义函数体。

如果函数需要操作从命令行输入的变量时,在函数体中可以用“$*”来指代该参数。

其中调用函数时Child 后的$1表示脚本程序的参数,判断的是该函数的返回值

冒号:表示的是空命令,while true就等价于while :

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

  1. Linux操作系统之Shell程序设计

    Shell是种命令解释程序,也可以看作是一种命令语言的解释器. 用户在与Shell交互时所输入的命令行必须符合Shell命令的语法和语义规范,才能够被Shell理解并执行.Shell所使用的这种命令语 ...

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

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

  3. Linux shell 程序设计

    shell 程序设计 主要的学习内容包含基本思路,语法:变量.条件判断和程序控制,命令列表,函数,命令及执行,调试,grep命令和正则表达式,find命令 什么是shell 适用编写执行相对简单任务的 ...

  4. linux基础之Shell Script入门介绍

    本文介绍下,学习shell script编程的入门知识,通过几个入门实例,带领大家走进shell script的神圣殿堂,呵呵,有需要的朋友参考下. 本文转自:http://www.jbxue.com ...

  5. Linux系统的shell是什么

    shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的是Bash.本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性. 什么是 ...

  6. linux(02)基础shell命令

    Linux(02)之shell命令 一,Linux命令行的组成结构 在我们的linux启动,登陆成功之后会显示: 这就是linux的命令行的组成结构 二,常见命令 1,Linux系统命令操作语法格式 ...

  7. Linux之19——Shell编程基础详解

    第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...

  8. Linux下的Shell工作原理

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

  9. Linux中的shell

    shell的含义: 首先shell的英文含义是"壳": 它是相对于内核来说的,因为它是建议在核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核. Li ...

随机推荐

  1. 【Javascript语言精粹】笔记摘要

    现在大部分编译语言中都流行要求强类型.其原理在于强类型允许编译器在编译时检测错误.我们能越早检测和修复错误,付出的代价越小.Javascript是一门弱类型的语言,所以Javascript编译器不能检 ...

  2. 027 hibernate查询语言(HQL)

    概述:数据查询与检索是Hibernate中的一个亮点,相对其他ORM实现而言,Hibernate提供了灵活多样的查询机制. 标准化对象查询(Criteria Query):以对象的方式进行查询,将查询 ...

  3. springboot 1.5.2 集成kafka 简单例子

    添加依赖 compile("org.springframework.kafka:spring-kafka:1.1.2.RELEASE") 添加application.propert ...

  4. [HDU1020] Encoding - 加密

    Problem Description Given a string containing only 'A' - 'Z', we could encode it using the following ...

  5. pc网页到移动端怎么自动加载适应移动端的css。

    1.通过link标签判断加入 以前听说过在link标签中加media = "handheld",但这个用到安卓或苹果都不管用,后来尝试以下方法,是管用的. <link hre ...

  6. [原创]adb使用教程v1.0-----by-----使用logcat快速抓取android崩溃日志

    原文再续,书接上回:<使用logcat快速抓取android崩溃日志>中提到的工具包可以下载拉~ <使用logcat快速抓取android崩溃日志>:http://www.cn ...

  7. cpp(第五章)

    1.副作用,指的是在计算表达式时对某些东西(如存储在变量的值)进行修改:顺序点,是程序执行过程中的一个点,在这里,进入下一步之前将确保对所有的副作用 都进行评估.(分号就是一个顺序点).for exa ...

  8. Dubbo有意思的特性介绍

    Duboo 不单让我们可以像使用本地服务一样的使用远程服务,还设计了很多特性来满足我们平时开发时常见的场景,省却了我们不少麻烦,真是一款有良心的框架,下面针对这些场景和解决方案来具体解释下: 1.接口 ...

  9. windows7 64bit下mvn命令后提示‘cmd’不是内部或外部命令,也不是可执行程序或批处理文件

    首先,开命令提示符,输入如下命令试试echo %M2_HOME% 回车如果显示的路径和安装路径一致说明配置没问题; 那么出现这个问题的原因可能就是路径问题,可能是你安装了某个软件更改了系统映射路径导致 ...

  10. 谈一下我们是怎么做数据库单元测试(Database Unit Test)的

    作者水平有限,如有错误或纰漏,请指出,谢谢. 背景介绍 最近在团队在做release之前的regression,把各个feature分支merge回master之后发现DB的单元测试出现了20多个失败 ...