shell程序设计入门(一)

导语

学习Linux系统,shell是必须要学习的编程语言,可以说,不学习shell,Linux的很多事情和功能就完成不了,shell从诞生开始,就是用来在不使用图形化界面的情况下实现Linux的种种功能的,就连Windows的命令提示符都是继承于shell

由于书上这一章的内容较多,因此分多个部分来记录

shell简介

书上原话:

shell表面上和Windows的命令提示符相似,但是它具备更强大的功能以完成相当复杂的程序。
你不仅可以通过它执行命令、调用Linux工具,还可以自己编写程序。

shell执行的shell程序,通常被称为脚本(联想python),它们是被打包好的shell命令,可以一次性执行完,而无需单步执行,通常用bash或sh来执行shell程序

可以通过版本查看命令查看当前Linux系统的版本

在这里插入图片描述

管道和重定向

在探讨shell的基本语法前,书上先介绍了如何对Linux程序(包括shell和其他高级程序设计语言程序)进行输入输出重定向

重定向

这里有一个简单的例子

ls -l > output.txt

这条命令把ls命令的输出保存到output.txt中,在这条命令中,>将标准输出(即屏幕,stdout)重定向到了另一个文件,文件存在时,这条命令默认执行的结果为覆盖原文件的内容

这有点类似于C语言的

fopen("output.txt","w");

如果仅仅只是需要向原文件添加内容,那么可以改成

ls -l >> output.txt

ls命令的输出会附加到文件尾部

shell命令在运行的时候是可以带参数的,一般将这个参数称作文件描述符,常用的是文件描述符0,1,2

0代表标准输入,1代表标准输出,2代表标准错误输出,这三者都可以重定向,下面有一个例子

kill -HUP 1234 >killout.txt 2>killerr.txt
kill -1 1234 >killouterr.txt 2>&1

第一个命令的意思是终止进程号位1234的进程,将信息输入到killout.txt,如果出错,则把错误信息输入到killerr.txt,这里的2是标准错误输出的文件描述符,

第二个命令意思是把标准输出和标准错误输出重定向同一个文件中,先重定向标准输出,然后重定向标准错误输出,这个>&1实际上是标准输出的文件描述符

除了输出,输入也可以重定向,如

more < a.txt

管道

Linux的管道很智能,它不仅可以连接进程,并且通过管道连接的进程可以并发运行,而且数据流在它们间的传递可以自动协调,书上给出了一个对ps命令结果排序的例子

如果不使用管道,实现排序的操作如下

ps > a.txt
sort a.txt > b.txt

在这里插入图片描述如果使用管道来连接的话

ps | sort >pssort.out

在这里插入图片描述当然也可以直接显示结果,不通过文件中转

ps | sort | more

在这里插入图片描述
管道中,允许连接的进程是没有上限的,下面是对系统所有进程排序的命令(去掉shell)

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

在这里插入图片描述

使用管道时,需要注意的是,不能在命令流中重复使用相同的文件名

cat mydata.txt | sort | uniq> mydata.txt

这行会得到一个空文件,具体来说,由于管道之间的进程是并行的,>操作符会清空mydata.txt的文件,然后再执行cat mydata.txt,并把结果排序传入mydata.txt,但由于文件已经清空,所以结果也为空

基础操作

脚本创建

下面是一个交互式程序,它的功能是从文件中大道包含字符串include 的文件,首先需要创建一个包含命令的文件,或者说脚本的文本文件,内容如下

#!/bin/sh

for file in *
do 
	if grep -q include $file
	then
		echo $file
	fi
done

exit 0

/bin/sh是默认执行的shell程序,不过由于笔者用的事centos7,用sh执行有很多问题,因此实际执行的时候用/bin/bash

exit和c语言的return作用是类似的,都是返回一个退出码,如果执行单个脚本的时候,退出码实际上没有什么作用,但是如果出现脚本之间相互调用的情况,那么退出码就可以作为检测脚本是否运行成功的依据

执行脚本

可以直接调用bash执行脚本,结果如下

在这里插入图片描述

当然,也可以通过修改文件权限,使得该脚本称为一个可执行文件

chmod +x first

在笔者的电脑上,这个时候还不能直接执行,需要

./first

才能执行,这是由于PATH配置的问题,结果如下

在这里插入图片描述

总结

本篇介绍一些shell的基本使用,主要是脚本和如何执行脚本的问题

参考文献

  1. 《Linux程序设计(第4版)》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值