【Shell编程】Shell程序设计
1、Shell简介
作为Linux灵感来源的Unix系统最初是没有图形化界面的,所有的任务都是通过命令行来实现的。因此,Unix的命令行系统得到了很大的发展,逐步成为一个功能强大的系统。
Shell是一个应用程序,它是用户与Linux系统的接口,允许用户向操作系统输入需要执行的命令,有点类似于Windows的命令提示符,但功能更加强大。
Shell对Linux系统的重要性不言而喻,它适合于比较简单的小任务,更加关注的是易于配置和维护,因此执行效率往往不是很高。Shell可以用来执行命令,调用Linux工具,还可以执行程序。Shell可以执行Shell程序,通常称为Shell脚本,在运行时解释执行,这就是Shell和Shell脚本的关系。
Linux系统中有各种不同的Shell,但是默认情况下,我们默认总是作为/bin/sh安装的标准shell是GNU工具中的bash,bash开源并且可移植,被广泛使用。
2、管道和重定向
(1)重定向输出
$ ls -l > output.txt # 将ls的输出直接保存到文件中 >
$ ps >> output.txt # 输出内容追加到文件末尾 >>
(2)重定向输入
$ more < input.txt # 重定向标准输入
$ more input.txt # more本身也接收文件参数
(3)管道
管道可以用来连接多个进程(数量没有限制),其操作符是 | ,通过管道连接的进程可以同时运行,并且数据流可以在他们之间自动协调的进行传递。
注意一点:当使用管道执行一系列的命令时,如果使用重定向输出,相应的输出文件是在这一组命令被创建的同时立即被创建或者写入的,所以绝对不要在命令流中使用相同的文件名,否则会得到一个空文件。
$ ps | sort > output.txt # 对当前进程排序输出
$ ps | sort | more # ps的输出排序,然后一次显示一屏
$ ps -xo comm | sort | uniq | grep -v sh | more # 按字母顺序排序ps的输出,然后uniq取出名字相同的进程,然后用grep -v sh删除名为sh的进程,最终将结果分页显示在屏幕上
$ cat data.txt | sort | uniq > data.txt # 错误,会得到一个空文件
3、作为程序设计语言的Shell
(1)交互式程序
在命令行上直接输入shell程序是一种简单方式,可以用来测试短小的代码段,方便快捷,更重要的是方便进行测试,这称为交互式脚本。但是每次要执行命令时,都要进行命令的输入,很繁琐,所以除了简单的测试一般情况下不会使用这种方法。
(2)创建脚本
创建一个非交互式脚本是我们一贯的做法,这就是Shell编程。shell脚本有其独特的优势和用武之地,概括为以下几点:(1)无需编译,解释执行;(2)以文本文件的形式存在;(3)有强大的正则表达式操作;(4)速度相对较慢,数据类型少;(5)主要用于系统管理和文件操作。
创建并运行一个shell脚本过程如下:
文件编辑。用文本编辑器创建文件,进行编辑,Linux并不以扩展名区分文件类型,但是一般为了直观,可以命令为以.sh为后缀的格式。
#!/bin/sh
for file in *
do
if grep -l POSIX $file # 匹配文件名包含POSIX的文件
then
echo $file
fi
done
exit 0
把脚本设置为可执行。文件创建完成后,简单方法是直接调用,比如$
/bin/sh first.sh,这可以运行,但是更常用的方法是改变文件权限为可执行,然后直接运行。$ chmod +x first.sh # 改变权限为可运行
$ first.sh # 直接运行
【Shell编程】Shell程序设计的更多相关文章
- [ SHELL编程 ] shell编程中数值计算方法实例
SHELL编程中经常会涉及到数值计算,有时候对于这些计算命令使用场景容易忘记或者混淆,这里针对常用的命令做个总结.主要包括let.bc.expr.(())等. 1.let 使用格式:let 表达式,表 ...
- Linux编程 20 shell编程(shell脚本创建,echo显示信息)
一概述 前面19章里已经掌握了linux系统和命令行的基础知识,从本章开始继续学习shell脚本的基础知识.在大量编辑shell脚本前,先来学习下一些基本概念. 1.1 使用多个命令 Shell ...
- (三)Linux Shell编程——Shell常用命令(输出、判断、循环、函数、包含)
3. 常用命令 3.1 输出 3.1.1 echo命令 echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串.命令格式: echo arg name="coding" ...
- Shell编程——shell常用命令
浏览器标签页的切换:Ctrl+Tab [终端]打开终端快捷建:Ctrl+Alt+t关闭终端快捷键:Ctrl+Shift+q打开新的终端标签页快捷键:Ctrl+Shift+t 关闭终端标签页快捷键:Ct ...
- shell编程 Shell script 的默认变量($0, $1...)
Shell script 的默认变量($0, $1...) 我们知道指令可以带有选项与参数,例如 ls -la 可以察看包含隐藏文件的所有属性与权限.那么 shell script 能不能在脚本文件名 ...
- Shell编程——Shell中的数学运算
在Linux Shell中进行数学运算,通常能够使用的运算符有: 简单运算: let [] (()) 高级运算: expr bc 1.let命令 let命令是bash内置命令.能够实现简单的算术以及逻 ...
- Shell编程笔记
Shell编程笔记与Windows下熟悉的批处理类似,也可以将一些重复性的命令操作写成一个脚本方便处理. 修改别人的脚本,运行后遇到个问题 setenv: command not found 查证 ...
- 10、shell编程+流程控制+分支嵌套
SHELL 编程 shell 是一个命令解释器,侦听用户指令.启动这些指令.将结果返回给用户(交互式的shell) shell 也是一种简单的程序设计语言.利用它可以编写一些系统脚本. ...
- shell编程--基本格式,基本语法,运算符,expr,(()),$[]
02/shell编程 Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell Shell也是一门编程语言."."号执行脚本时,会让脚本在调用者 ...
- shell编程企业级实战
如何才能学好Shell编程 为什么要学习shell编程 Shell是Linux底层核心 Linux运维工作常用工具 自动化运维必备基础课程 学好shell编程所需Linux基础 熟练使用vim编辑器 ...
随机推荐
- HDU 4363
这题是记忆化搜索很容易想到,但状态却不好设 dp[i][j][u][d][l][r][k].对于矩形为i*j,它的四周的颜色分别为u,d,l,r,横竖切的状态为k的种数. 其中要注意一个问题是,停止不 ...
- I NEED A OFFER! (hdu 1203 01背包)
I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- CreateDialog Win32 API调用的一个小问题
在老版本号的VC编译器上.关键调用是下面2句: InitCommonDialogs(); HWND hwndDialog = CreateDialog(hInstance, "IDD_XXX ...
- CentOS下安装使用phpMyAdmin. Set up phpMyAdmin on CentOS
须要组件: Apache PHP Mysql phpMyAdmin Apache 0. yum install httpd 1. 确认版本号 $ httpd -v 2. 启动apache $ sudo ...
- C++ 移位运算与进制转换 浅析
移位运算包括"逻辑移位"(logical shift)和"算术移位"(arithmetic shift). 逻辑移位:移出去的位丢弃,空缺位(vacant bi ...
- 从头认识java-15.2 Collection的经常用法(2)-注意点
上一章节我们讲述了Collection的经常用法.还有之前的章节我们介绍了Collection的addAll方法,这一章节我们介绍一下它的注意点. 注意点就是,在经常用法里面,基本都是可选操作. 什么 ...
- QFileDialog关于选择文件对话框中的几个信号的说明(currentChanged,directoryEntered,fileSelected,filterSelected)
QFileDialog关于选择文件对话框中的几个信号 实例: openFile::openFile(QWidget *parent) :QWidget(parent),ui(new Ui::openF ...
- E20170826-hm
squash vt. 挤进; 将(某人[某物])压扁; 使沉默; 平定(叛乱等); meld vt. (使) 融合,合并,结合; n. 混合,合并; amend vt. 修订; 改良,修改; a ...
- C指针基础知识
指针的声明 C语言声明格式:"类型 变量名;" 基本类型:int hoge; 指针类型:int *pointer; 区别在于: 声明 含义 int hoge; 声明整数类型的变量 ...
- caffe介绍