Shell基础一
Shell指令:
shell识别三种基本命令:内建命令、Shell函数以及外部命令:
内建命令就是由shell本身所执行的命令。有些命令是由于其必要性才内建的;例如:cd、read; 另一种内建命令的存在则是为了效率,其中最典型的就是test命令(稍后有介绍),编写脚本时会经常用到它。另外还有I/O命令。例如echo 和 printf。
Shell函数是功能健全的一系列程序代码,以Shell语言写成,它们可以像命令那样引用,稍后也有介绍;
外部命令就是由Shell的副本(新的进程)所执行的命令,基本过程如下:
a、建立一个新的进程。此进程即为Shell的一个副本。
b、在新的进程里,在PATH变量内所列出的目录中,寻找特定的命令。 /bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin为PATH变量典型的默认值。当命令名称含有斜杠(/)符时,将掠过路径查找步骤;
c、在新的进程里,以所找到的新程序取代执行中的Shell程序并执行。
d、程序完成后,最初的Shell会接着从终端读取的下一条命令,或执行脚本里的下一条命令;
变量:
在Shell的世界里,变量值可以是(而且通常是)空值,也就是不含任何字符。这是合理的,也是常见的,好用的特性。空值就是null;
Shell变量名称的开头是一个字母或下划线符号,后面可以接着任意长度的字母、数字或下划线符号。变量名称的字符长度并无限制。
注意:
变量赋值的方式为:先写变量名称,紧接着=字符,最后是新值,中间完全没有任何空格(这点于C/C++很大区别)。 当要取出shell变量的值时,需于变量名称前面加上$字符。当所赋值的值内含空格时,请加上引号;
first=isaac middle=bashevis last=singer
fullname="isaac bashevis singer"; //等号左右两边都没有空格
oldname=$fullname; //此处要加上$符
fullname="$firsh $middle $last"; //将几个变量连接起来,要加上双引号
华丽的printf输出:
printf命令模仿C程序库(library)里的printf()库程序(library routine)。它几乎复制了该函数的所有的功能;
printf "hello world"
printf不像echo那样会自动提供一个换行的符号。你必须显式地将换行符指定成\n 。 printf命令的完整语法分为两部分:
printf format-string [arguments .......]
$printf "The first program always prints '%s, %s ! '\n " Hello world
The first program always prints 'Hello, world !'
基本的I/O重定向以及重定向与管道
标准输入/输出被称为:标准输入、标准输出、以及标准错误输出;
示例:等登录shell时,UNIX便将默认的标准输入、输出以及错误输出安排成你的终端。I/O重定向就是通过与终端交互,或是在shell脚本里设置
重新安排从哪里输入或输出到哪里;
以 < 改变标准输入
program < file 可将program的标准输入改为file;
以 > 改变标准输出
program > file 可将program的标准输出修改为file;
> 重定向符在目标文件不存在时,会新建一个。然而,如果目标文件已存在,它就会被覆盖掉,原本的数据都会丢失;
以 >> 附加到文件;
program >> file
如果目标文件不存在, >>重定向符便会新建一个。如果目标文件存在,它不会直接覆盖掉文件,而是将程序所产生的数据附加到文件结尾处;
以 | 建立管道:
program1 | program2
将program1的标准输出作为program2的标准输入。虽然< 和 > 可将输入与输出连接到文件,但管道可以使得执行速度比使用临时文件的程序块10倍以上;
特殊文件:/dev/null 与 /dev/tty
unix系统提供了两个对shell编程特别有用的特殊文件。第一个文件/dev/null, 就是大家熟知的位桶(bit bucket)。传送到此文件的数据都被系统丢掉。也就是说,当程序将数据写到此文件时,会认为它已成功完成写入数据的操作,但实际上什么事都没做。如果需要的是命令的退出状态。而非它的输出,此功能会很有用。例如,测试一个文件是否包含某个模式:
if grep pattern myfile > /dev/null
then
.... //找到模式
else
.... // 找不到模式时
fi
相对地,读取/dev/null则会立即返回文件结束符号。读取/dev/null的操作很少会出现在Shell程序里,不过了解这个文件的行为模式还是非常重要的;
另一个特殊文件为/dev/tty。 当程序打开此文件时,unix会自动将他重定向到一个终端【一个实体控制台或者串口】,也可能是通过网络与窗口登录的伪终端再与程序结合。这在程序必须读取人工输入是特别有用;
Shell基础一的更多相关文章
- Shell基础学习小结
0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...
- Shell基础-环境变量配置文件
Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...
- shell基础二十篇 一些笔记
shell基础二十篇 转自 http://bbs.chinaunix.net/thread-452942-1-1.html 研讨:Bash 内建命令 read (read命令更具体的说明见博客收藏的一 ...
- shell基础(转)
shell基础1:文件安全与权限 http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger 附:Linux ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- shell基础及变量
一 Shell概述 1.Shell的作用——命令解释器,“翻译官” shell作为一个人机接口,用于解释用户输入的命令,将命令解释为Linux内核可以执行的2进制代码,并将执行的结果返回在标准终端上. ...
- Shell 基础教程
一个比较好的shell基础教程: http://www.runoob.com/linux/linux-shell.html
- Linux基础学习(10)--Shell基础
第十章——Shell基础 一.Shell概述 1.Shell是什么: (1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来 ...
- Linux Shell基础(下)
Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...
- Linux shell基础知识(上)
Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...
随机推荐
- The document "ViewController.xib" could not be opened. Could not read archive.
The document "ViewController.xib" could not be opened. Could not read archive. Please use ...
- POJ1797 Heavy Transportation 【Dijkstra】
Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 21037 Accepted: ...
- Python之美[从菜鸟到高手]--一步一步动手给Python写扩展(异常处理和引用计数)
我们将继续一步一步动手给Python写扩展,通过上一篇我们学习了如何写扩展,本篇将介绍一些高级话题,如异常,引用计数问题等.强烈建议先看上一篇,Python之美[从菜鸟到高手]--一步一步动手给Pyt ...
- mac下配置cocos2d-x3.0
今天看到3.0的正式版公布了,就马上荡下来试试3.0,以下记录下环境变量配置过程 打开用户文件夹下.bash_profile文件,配置环境 1.首先配置下android sdk,我的是在opt文件夹下 ...
- react的初涉入
1.react并不是一个完整的MVC,MVVM框架 它只负责view层 2.react跟Web Components不冲突 3.react的特点是“轻” 4.react用组件的方式重新思考构建UI的过 ...
- java concurrency: ThreadLocal及其实现机制
转载:http://shmilyaw-hotmail-com.iteye.com/blog/1703382 ThreadLocal概念 从字面上来理解ThreadLocal,感觉就是相当于线程本地的. ...
- poj 3286 统计0的个数
#include <iostream> using namespace std; long long p; ]; long long solve(long long n){ ; ;i< ...
- Nginx阅读笔记(四)之root和alias
nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应.root与alias主要区别在于nginx如何解释location后面的uri ...
- Qt 技巧: 解决未解析的SSL问题
因为https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在使用之前必须先做一些准备工作: 需要安装OpenSSL库: 1.首先打开http://slproweb.com/product ...
- Android dp和sp的用法汇总
1 > dp 是跟像素密度无关的单位,也就是说在相同尺寸.但不同的分辨率的手机上,用dp标识的东西,显示的大小是一样的. sp是用于标识字体的,它不仅跟屏幕尺寸有关,还跟设置的系统字体大小有关. ...