Linux Shell脚本极简入门 - 51ste软件测试部落-中国软件测试者的乐园
登录|注册

Linux Shell脚本极简入门

发布时间:2017-04-02 16:33:43  关键字:shell极限入门 shell学习 

Linux使用的是GNU开发的增强型第二代shell,成为BASH Shell。

一、首先在之前,我们来了解下文本编辑器VIM

1、vi三个模式的关系用图

关系用图

2、vi的常用命令

一般模式:
vi filename    --建立文本文件 
Ctrl + f      --屏幕向前翻动一页
Ctrl + b      --屏幕向后翻动一页
0           --(数字0)移动到这一行的第一个字符处
$           --移动到这一行的最后一个字符处
G           --移动到这个文件的最后一行
n      --光标向下移动n行
/word        --在光标之后查找一个名为word的字符串
?word        --在光标之前查找一个名为word的字符串
:n1,n2s/word1/word2/g    --在第n1与n2行之间查找word1这个字符串,并将该字符串替换为word2
:1,$s/word1/word2/g      --从第一行到最后一行查找word1字符串,并将该字符串替换为word2
:1,$s/word1/word2/gc     --从第一行到最后一行查找word1字符串,并将该字符串替换为word2,且在替换前显示提示符让用户确认(conform)
x,X          --x为向后删除一个字符,X为向前删除一个字符
nx           --向后删除n个字符
dd           --删除光标所在的那一整行
d1G          --删除光标所在行到第一行的所有数据
dG           --删除光标所在行到最后一行的所有数据
ndd          --删除光标所在列的向下n列
yy           --复制光标所在行
nyy          --复制光标所在列的向下n列
y1G          --复制光标所在列到第一列的所有数据
yG           --复制光标所在列到最后一列的所有数据
p,P          --p为复制的数据粘贴在光标下一行,P则为粘贴在光标上一行
u            --恢复前一个动作

编辑模式:
i,I          --插入:在当前光标所在处插入输入的文字,已存在的字符会向后退
a,A          --添加:由当前光标所在处得下一个字符开始输入,已存在的字符会向后退
o,O          --插入新的一行:从光标所在处的下一行行首开始输入字符
r,R          --替换:r会替换光标所指的那一行字符;R会一直替换光标所指的文字,知道按下Esc为止

命令模式:
:wq!          --文件权限不对,强制写入方式。这只有在你的权限可以改变的情况下才能成立。
:w           --将编辑的数据写入硬盘文件中
:q           --退出vi
:q!          --若曾经修改过文件,又不想保存,使用!为强制退出不保存文件
:wq          --保存退出
:w[filename]    --将编辑数据保存为另一个文件
:r[filename]    --在编辑的数据中,读入另一个文件的数据。亦即将filename这个文件内容加到光标所在行的后面
:set nu        --显示行号,设定之后,会在每一行的前面显示该行的行号
:set nonu       --取消行号
n1,n2 w[filename]  --将n1到n2的内容保存为filename这个文

二、学习Bash(Bourne Again Shell)

文字模式下指令输入的方式,就是bash的工具与接口。

1、什么是shell

控制硬件的是核心,用户是利用Shell控制kernel提供的工具(Utility)来操控硬件正确工作。

2、Bash Shell

bash主要优点:

  • 命令编辑能力   

~/.bash_history记录的是上一次登入以前执行过的指令,至于这一次登入执行的指令都被暂存在内存中,当您成功注销系统后,该指令记忆才会记录到.bash_history中。

  • 补全功能

指令补全:tab,补全命令;按下两次Tab将会把所有重复的指令都列出来,如b按两次Tab,把所有b开头的命令都列出来。
文件名称补全

  • 命令别名(alias)设定功能

输入alias就可以知道当前的命令别名都有哪些。也可以直接输入下列命令来设定别名:alias lm='ls -al'

  • 作业控制、前景背景控制

前、背景控制可以让工作更顺利。作业控制可以让我们随时将作业放到背景中执行,而不用怕不小心使用了Ctrl + C关掉该程序。此外,还可以在单一登入的环境中达到多任务的目的。

  • Shell scripts的强大功能

输入指令的方式为:
command [-options] parameter1 parameter2 ...
指令         选项        参数(1)      参数(2)
command为指令的名称,例如变换路径的指令为cd
中括号[]并不存在于实际的指令中,在加入参数时,通常为“-”符号,有时候完整名称会输入“--”符号。例如ls --help
parameter1 parameter2为依附在option之后的参数,或者是command的参数
command, -options, parameter1这几项之间以空格分隔,不论空几格shell都视为一格
指令太长的时候,可以使用 符号来跳转Enter,使指令连续到下一行

3、变量与变量的设定
    
为了与自定义变量区别开来,环境变量通常以大写字符来表示。

echo $变量名   --显示变量
env            --读取当前系统中主要变量
set            --读取当前系统中所有变量(包括系统变量和用户自定义变量)

变量设定规则:

  • 变量与变量内容以等号“=”连结。
  • 等号两边不能直接接空格符。
  • 变量名称只能是英文字母与数字,其中数字不能是开头字符。
  • 若有空格符,可以使用双引号或单引号将变量内容结合起来,但要特别留意,双引号内的特殊字符可以保留变量特性,单引号内的特殊字符则仅为一般字符。
  • 必要时以跳转字符“”将特殊符号(如Enter,$,,空格符,'等)变成一般符号。
  • 在一串指令中,还需要借助其他指令提供的信息,这时可以使用quote“` command`”。
  • 若该变量为扩增变量内容时,则需以双引号及$变量名称(如"$PATH":/home)继续累加内容。
  • 若该变量需要在其他子程序执行,则以export使变量可以动作,如export PATH。
  • 通常大写字符为系统预设变量,自定义变量可以使用小写字符,方便判断(纯粹依照用户兴趣与嗜好)。
  • 取消变量的方法为:unset 变量名称。

4、命令别名与历史命令

alias         --定义规则与变量定义规则几乎相同
unlias        --取消别名

history       --查询指令历史记录          
[!number] [!command] [!!]    --执行第numberge指令 执行开头字母为command的指令 执行上一个指令

5、Bash shell的配置文件

在命令行输入的变量也好、命令别名也罢,都只是针对该次登入的设定,所以,只要您注销,那么上次的设定值就会不见了。

系统设定值,也就是每个用户进入到 bash shell 之后先读取的配置文件。

  • /etc/profile:这个文件设定了几个重要变量,例如PATH、USER、MAIL、HOSTNAME、HISTSIZE、umask等,也同时规划出/etc/inputrc 这个针对键盘热键设定的文件数据内容。您可以在这里设定总体的PATH等信息。同时,这个文件还规划出/etc/profile.d及/etc/inputrc这两个文件,其中,inputrc作用于history(历史指令)。注:通常我都喜欢将/usr/local/bin 这个路径加在最前面,因为通常自己安装的套件自己最喜欢,所以当然最先搜寻。此外,请注意,可以改变HISTSIZE的大小,改成50就可以,比较安全!
  • /etc/bashrc:这个文件用于规划umask,同时规划提示符的内容(就是里面那个PS1)。不同的 Linux 版本里摆放的位置可能不太一样,所以需要查询。 
  • /etc/man.config:这个文件的内容规范了使用man时man page的路径到哪里寻找,说得简单一点,这个文件指定了输入man时查看数据的路径设定。那么什么时候修改这个文件?如果您是以 Tarball方式安装数据,那么您的 man page(指令说明文件)可能会放在/usr/local/softpackage/man中,其中的softpackage 是套件名称,这时您得以手动方式将该路径加到 /etc/man.config中。

    这就是系统在设定时常用到的文件。需要特别留意的是,通常设定完这几个文件之后,需要先注销再登录后才会启动设定。

个人设定值在个人根目录下的几个隐藏文件中,分别会用到下面的几个文件(注意,下面的文件都是隐藏文档,需要使用ls -al方能显示出来),下面的“~”代表的是根目录。

  • ~/.bash_profile:里面定义了个人路径(PATH)与环境变量的文件名称。有的时候可以用~/.profile或~/.bash_login等文件来取代这个文件!
  • ~/.bashrc:这个文件对于个人喜好的bash设定是最重要的,因为我都是在这里设定我的个人变量,例如命令别名的设定,路径的重新定义等。(常用)
  • ~/.bash_history:这个文件用于将您曾经用过的命令记录下来,而当您再次以上下键搜寻或者直接以history搜寻时,就可以找到曾经用过的指令。需要注意的是:在这一次执行过程中用到的指令,将在您退出shell之后才会被记录到这个文件中,否则将先被写到高速缓存中;可以通过history指令将其中的记录搜寻出来;这个文件的指令记录笔数与HISTSIZE有关,您可以自行在~/.bashrc中设定,或者直接由root在/etc/profile中统一设定。
  • ~/.bash_logout:这个文件则是在您注销shell的时候BASH为您所做的事情。通常默认是只有清除屏幕这件事,可以把备份或重要的事写入其中。

source 变量配置文件   --不注销直接读入变量配置文件

6、通配符和特殊符号

*         --通配符,代表任意字符(0到多个)
?         --通配符,代表一个字符
#         --注释,这个最常用在脚本中,视为说明
        --跳转符号,将特殊字符或通配符还原成一般字符
|         --分隔两个管线命令的界定
;         --连续性命令的界定(注意,与管线命令不同)
~         --用户的根目录
$         --即变量前需要加的变量值
&         --将指令变成在背景下工作
!         --逻辑运算中的“非”(not)
/         --路径分隔符号
>, >>     --输出导向,分别为“取代”与“累加”
'         --单引号,不具有变量置换功能
"         --具有变量置换功能
` `       --两个“`”中间为可以先执行的指令
( )       --中间为子shell的起始与结束
[ ]       --中间为字符组合
{ }       --中间为命令区块组合

Ctrl + C  --终止当前命令
Ctrl + D  --输入结束(EOF),例如邮件结束的时候
Ctrl + M  --就是Enter
Ctrl + S  --暂停屏幕的输出
Ctrl + Q  --恢复屏幕的输出
Ctrl + U  --在提示符下,将整行命令删除
Ctrl + Z  --暂停当前命令

本文为51ste.com原创文章,未经授权,不得转载、摘编等使用上述作品盈利;个人转载,需标明原文出处。

() ()

微信二维码

部落微信公众号

QQ二维码

部落QQ群二维码