Linux程序设计之shell程序设计
看了《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程序设计的更多相关文章
- Linux操作系统之Shell程序设计
Shell是种命令解释程序,也可以看作是一种命令语言的解释器. 用户在与Shell交互时所输入的命令行必须符合Shell命令的语法和语义规范,才能够被Shell理解并执行.Shell所使用的这种命令语 ...
- Linux 的使用基础---Shell程序设计
Shell是Linux系统中的一个重要的层次,它是用户与系统交互作用的界面.Shell除了作为命令解释程序以外,还是一种高级程序设计语言.利用Shell程序设计语言可以编写出功能很强.但代码简单的程序 ...
- Linux shell 程序设计
shell 程序设计 主要的学习内容包含基本思路,语法:变量.条件判断和程序控制,命令列表,函数,命令及执行,调试,grep命令和正则表达式,find命令 什么是shell 适用编写执行相对简单任务的 ...
- linux基础之Shell Script入门介绍
本文介绍下,学习shell script编程的入门知识,通过几个入门实例,带领大家走进shell script的神圣殿堂,呵呵,有需要的朋友参考下. 本文转自:http://www.jbxue.com ...
- Linux系统的shell是什么
shell是用户和Linux操作系统之间的接口.Linux中有多种shell,其中缺省使用的是Bash.本章讲述了shell的工作原理,shell的种类,shell的一般操作及Bash的特性. 什么是 ...
- linux(02)基础shell命令
Linux(02)之shell命令 一,Linux命令行的组成结构 在我们的linux启动,登陆成功之后会显示: 这就是linux的命令行的组成结构 二,常见命令 1,Linux系统命令操作语法格式 ...
- Linux之19——Shell编程基础详解
第一部分:Linux Shell 简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序, ...
- Linux下的Shell工作原理
Linux下的Shell工作原理 Linux系统提供给用户的最重要的系统程序是Shell命令语言解释程序.它不属于内核部分,而是在核心之外,以用户态方式运行.其基本功能是解释并执行用户打入的各种命令, ...
- Linux中的shell
shell的含义: 首先shell的英文含义是"壳": 它是相对于内核来说的,因为它是建议在核的基础上,面向于用户的一种表现形式,比如我们看到一个球,见到的是它的壳,而非核. Li ...
随机推荐
- c# .net core 下的网络请求
本文章是在VS2017的环境下,.net core 1.1版本以上. 在这期间,由于.net core 并不基于IIS,我们的过去的网络请求代码在.net core框架下,有可能会出现不兼容,报错的现 ...
- C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印
从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印.例如 5 ***** ***** 3 ***** **** ...
- 求一个二维整数数组最大子数组之和,时间复杂度为N^2
本随笔只由于时间原因,我就只写写思想了 二维数组最大子数组之和,可以 引用 一维最大子数组之和 的思想一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组a[n ...
- 使用Git上传项目代码到github
github是一个基于Git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.这对于一般人来说公共仓库就已经足够了. 注册账户以及创建仓库 要想使用gi ...
- Android中SimpleAdapter的使用—自定义列表
本人初学Android,今天研究到Adapter这块感觉挺有意思的,写了个自定义列表进行测试 首先我们新建一个layout列表布局文件,具体布局可以自己设定. 下面贴上我的自定义布局文件代码 < ...
- bootstrap4中文版(纯手工翻译)
1初步开始 1.1依赖 这个仓储包含一系列基于bootstrap标识和css样式的原生angular2指令.所以是不需要依赖jq和bootstrap.js的.只需要以下依赖即可: Angular(需要 ...
- SmartCoder每日站立会议07
站立会议内容 基本框架已出,首页地图功能还没有接入完全. 1.站立会议照片: 2.任务展板 3.燃尽图
- CI Weekly #20 | 从持续集成的角度看 “云” 的价值
很多移动开发工程师对 fastlane 耳熟能详,最近 flow.ci 的 iOS 工作流「编译」这步已采用 fastlane gym 工具(iOS 应用打包签名自动化),进一步优化了构建打包速度.快 ...
- C语言错题小本子
int a; ; a = ! x< //a的值是多少 我的答案:0, 正确答案:1 错误原因:没有熟练掌握运算符的优先级 // 找出下面无效的C语言变量名 A. _a B. main C. pr ...
- javaSE_08Java中static、继承、重写
一.Static 学习静态这个关键字,关键是抓住两个点: 1,关注其语法特点 2,关注其使用场景 案例讲解: 我们先从静态变量开始,当一个成员变量加上static修饰之后,会是一个什么效果? 比如创建 ...