Linux之ubuntu学习笔记(六):shell基础

来源:互联网 发布:魔卡幻想网络不给力 编辑:程序博客网 时间:2024/05/15 06:55

---------------------Shell简介------------------------------------------------------------------

shell可以看做是linux下的一个用户的命令行接口,说白了就是命令解释器

当我们输入一条命令时,shell会帮我们做很多操作

shell类似其他编程语言中具有元字符和预留关键字:

-------------------元字符&& 预留关键字-----------------------------------------------------

元字符: <> , |  , : , ! , ? , * , $ , \ , ' , `, " , ~, [ ] , ( ) , { }

预留关键字: case , do , dome , elif , else , esac , for , fi , function , if , in , select , then , until , while


------------------通配函式-------------------------------------------------------------------------

就是对 * , ? , [ ]一系列通配符的应用

* : 匹配0或多个字符

?: 匹配单一字符

[list ]: 可以匹配列表中的一个个字符

[!list]: 可以匹配不存在于列表中的一个字符

{ string1 , string2 , string3 }: 可以匹配给出字符串中的一个


---------------.输入/输出定向--------------------------------------------------------------------

shell 中有三个默认的输入输出流

stdin : 标准的利用键盘输入

stdout:输出到终端

stderr : 将错误信息输出到终端

下面是一个改向的简单例子:


注意:

1.可以利用>>符号来添加文本,而不是改写

2.一条命令中可以包含多次改向

3.注意一种写法的区别:

cat  > file1 2>&1  : 是将stdout 和stderr都输出到file1中

cat  2>&1 >file1 : 是将错误信息输出到/dev/<username> , 将stdout输入到file1中

------------------------管道-------------------------------------------------------------------------

管道: 多个指令组成的序列,每个指令之间用|隔开,叫做管道


管道其实就是一种两个命令的导致的输入和输出链接起来,也就是一个文件的输出可以作为另一个文件的读入

管道所做的工作有时候不仅仅是简单的传导,还可以通过过滤器做一些操作:

首先通过一个例子帮助和我一样的初学者熟悉过滤器:

首先引入一个命令 wc  <filename> ( 如果不加的话则默认标准输入流):


一次输出文本的行数,单词数n和字节数

下面是它的几个常用的options:
-c : 输出文本中的字符数

-w : 输出文本中的单词数

-l : 输出文本中的行数

----------------我是一个例子-----------------------------------------------------------------


----------------我这个例子完了--------------------------------------------------------------

grep可以看做一个过滤器,具体操作在后面会有专门的解释

-----------------------并行输出----------------------------------------------------------------、

tee指令可以将输出内容并行输出到一个文件和标准输出流

-------------------命令的局部替代----------------------------------------------------------------

有两种方式:

一种是用<`>把要产生替换参数的命令括起来;( 这个符号不是单引号,看清楚)

第二种是用$( ) 把要产生替换参数的命令括起来。

可以把括起来的部分的最终结果放在此处直接替代

----------------------命令组----------------------------------------------------------------------

一,多条命令在同一行执行 ( 我觉得没什么用)

二,将多条命令变成一个命令组执行,用()和 { }都可以做到, 共享一个输入输出流,有两种方式:有一些区别和联系:

1. ( )里的每条命令间用<;>隔开,但最后一条命令后可以没有<;>,但 { } 中最后一个命令也必须有<;>,且第一条命令和<{>之间要有一个空格

2.括号内的重定向都不对括号外部产生影响

3.()是另开一个subshell执行,而 { } 就在当前shell下

---------------------shell变量---------------------------------------------------------------------

shell中的变量和其他编程语言的变量大同小异,只不过有以下几条规范:

1.一个变量是shell的一部分,一个变量的名字必须是独一无二的

2.变量的开头不能是一个数字

3.给变量赋值时要用以下格式,不能乱加空格:

 $variable=value

调用变量的方式很简单  $<variableName> 的形式调用就可以了

有一个重要的关键字:export

用export 对变量进行操作,那么在之后的子进程或subshell中对变量进行修改,不会影响当前变量的值,在配置环境变量时能够体现出该关键字的作用

还有一些内部定义的标准shell变量,这些变量大部分都是由大写字母构成的,下面我们简单介绍几个常用的:

1. $: 当前的shell的PID

2.PATH:查找可执行文件时的路径

3.PWD:当前进行操作的目录

4.HOME: 用户的home目录

5.LANG:用户的语言

注意:

1.把内部定义的shell变量重写,往往会造成难以预期的后果

2.所以为了避免冲突,我们在定义shell变量时最好还是用小写字母比较好

------------------------命令的返回值-------------------------------------------------------------------

一个命令会给它的父亲进程返回一个值,通常来说,0代表成功,非0代表失败

$? :可以输出上一条命令的返回值

下面举一个例子来更直观的体现:


-----------------元字符的输出控制--------------------------------------------------------------

不是很好讲清楚,我就用一个例子来说明把

转义元字符

---------------------我是一个例子----------------------------------------------------------------

ab

--------------------------我完了--------------------------------------------------------------------


转义非元字符: 基本和C++一样

\n  换行 

\t tab ................................................

-------------------很有用的alias别名----------------------------------------------------------------

命名别名的方式:



unalias 是删除别名命名

alias单独出现是打印已经定义好的别名


0 0