shell学习笔记

来源:互联网 发布:java中获取数组的长度 编辑:程序博客网 时间:2024/06/07 16:46

虽然以前学习过相关的知识,但是现在忘得差不多了,打算从头开始学习。

shell script与早期的批处理文件(.bat或者.dos文件)相似,但是增加了程序的编写,且不需要编译就能够执行。

shell script在处理数据的速度上是不太够的,但它是管理系统的一项很好的对工具。bash(Bourne Again Shell)是Bourne Shell的增强版,是Linux默认shell。

1、变量与环境变量。

(1)export

变量一般指自定义的变量,无法在父进程中使用,export能使自定义变量变为环境变量。在引用自己的变量设置给后来调用的文件或其他程序使用时,此时只要在原本的第一个文件内设置好export变量,后面所调用的文件就能使用这个变量了,非常适合于shell script。

注意:如果换了一个shell,则已经export的环境变量失效。

(2)保留变量设置

1. login与non-login shell的区别:获得bash时需要完整登陆流程(用户和密码)的,就称为login shell。

2. etc/profile:每个用户登录时取得bash时一定会读取的配置文件。在Ubuntu中,etc/profile会读取/etc/bash.bashrc文件,并从/etc/profile.d目录的配置文件中搜集shell的设置。

3. /etc/inputrc:如果用户没有自定义输入的按键功能,/etc/profile会决定设置"INPUT=/etc/inputrc"这个变量。

4. /etc/profile.d/*.sh:表示目录内的众多文件,如果需要帮助所有用户设置一些共享的命令别名,可以在改目录下自行创建拓展名为.sh的文件。

5. ~/.bash_profile与~/.bash_login、~/.profile属于同一类,用于配制给人偏好。

值得注意的是,不同的LINUX操作系统下,这个文件可能是不同的,可能是~/.bash_profile; ~/.bash_login或 ~/.profile其中的一种或几种,如果存在几种的话,那么执行的顺序便是:~/.bash_profile、 ~/.bash_login、 ~/.profile。比如我用的是Ubuntu,我的用户文件夹下默认的就只有~/.profile文件。

6. ~/.bashrc:荡去的non-login shell时,该bash配制文件仅会读取~/.bashrc而已。在red Hat系列的版本中,会主动调用/etc/bashrc文件。

login shell的配置文件读取流程:



(2)数据流重定向

表示将某个命令执行后应该要出现在屏幕上的数据传输到其他的地方。

1. 分为输入与输出


(3)管道命令

将输出的数据按照想要的格式输出,对系统管理非常有帮助。

1. 选取命令

cut:以“行”为单位分析,在一行信息中取出某部分我们想要的。

grep:分析一行信息,如果其中有需要的,就将该行拿出来。

注意,这些命令中查找的字符都是用单引号括起来的。

2.  排序命令:sort, wc, uniq

3. 双重定向tee:可将数据床给两个设备,例如一个存文件,一个在屏幕显示

ls -l /home | tee ~/homefile |more

4. 字符转换命令:tr, col join, paste, expand

5. 参数代换xargs:很多命令不支持管道命令,可以通过xargs提供该命令引用standard input。

6. 切割命令split:在Windows下面,要将文件切割要如何操作?伤脑筋吧!在Linux下面就简单多了,使用-b size将切割文件限制其大小,如果是行数的话,那么就是用-lline切割。

7. 文件比较工具:diff,cmp,patch

后面加参数,相当于产生某个命令的参数。


(4)正则表达式

正则表达式的特殊字符与一般在命令行输入命令的“通配符”并不相同。例如,在通配符中*代表是零到无限多个字符的意思,但是在正则表达式中,*则是重复0到无穷多个前一个RE字符(【】内的字符)的意思。

1. 比较重要的一个命令是sed,可以帮助系统管理员管理好日常的工作,需要仔细学习。

2. awk:相比于sed常作用于一整行的处理,awk比较倾向于将一行分成数个“字段”处理,适合处理小型的数据。

在每一行的每个字段都是有变量名称的,那就是$1,$2等变量名称。$0代表一整行数据。格式为awk ’条件类型1{动作1}条件类型2{动作2}‘ filename;

例如,查阅/etc/passwd中第三列小于10以下的数据

<pre name="code" class="plain">cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}'

但是,第一行数据没有显示出来,这是因为读入第一行时,变量$1 $2默认还是空格键为分隔,虽然定义了FS=“:”,但是却只能在第二行后才开始生效,可以通过预先设置awk变量,利用BEGIN关键字实现。
cat /etc/passwd | awk 'BEGIN{FS=":"} $3 < 10 {print $1 "\t" $3}'


比较常见的几个环境变量:(1)PS1,:命令行中默认内容。

(5) shell script

script的执行方式的区别
source:
直接运行shell文件是子进程,丽丽按摩对变量的定义在父进程中没有,如果要在父进程中生效,使用source运行shell文件

0 0
原创粉丝点击