音乐

  1. Fields Of Gold - Sting
  2. Beautiful Girl - INXS
  3. Take Me To Church - Hozier
  4. Stephanie Says - Lady & Bird
  5. All of Me - John Legend
  6. 一丝不挂 - 陈奕迅
PHPTalk2.0 新版全新上线,欢迎体验

Shell编程学习笔记


第一节 概述

什么是Shell?

shell是一种命令解释器,一种简单的语言,和php类似

Shell的分类?

  • Bourne Shell:从1979年起Unix就开始使用这种Shell,Bourne Shell的主文件名为sh。也是现在主流的Shell。
  • C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名。

注意:Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、bash、psh、zsh,C家族主要包括csh、tcsh。其中Bourne家族的bash是我们现在的标准shell与sh兼容。所有的系统命令可以在shell中直接调用,如ls。

第二节 Shell脚本的执行方式

echo 命令

语法:echo [选项] [输出的字符]

作用:输出字符串

如果字符串中不包含空格可以直接使用echo 字符串

如果字符串中包含空格则需要加上双引号如:echo “字符串”

双引号包含的字符串不能包含 ! 等特殊关键字,如需包含需要用单引号‘’包含

加上选项 -e 会解析 \d 等一些命令,如a\bc则输出ac会解析\b,如需详细了解请自行百度

编写第一个Shell脚本

创建一个shell脚本 vim hello.sh

#!/bin/bash
#这是我的第一个shell脚本文件
#author 崔自伟
echo “崔自伟是一个高雅的人,是一个脱离了低级趣味的人"

注意:# 在shell脚本文件中表示注释,但是 #!/bin/bash 是例外 表示声明这是一个shell脚本文件

怎么执行?

1.推荐方法:给文件赋予可执行权限 chmod 755 文件名,然后执行./hello.sh,注意使用这种方式必须指定路径

2.使用bash hello.sh,使用此方法可以直接执行该脚本文件,甚至不用赋予可执行权限

其他注意点

  • 如果是下载的是dos下的Shell脚本文件在Linux执行报错,最可能是由于Linux和windows的回车解释符号不同,尝试使用dos2unix 文件名转换一下,同理也可以使用unix2dos,如果这两个命令不存在请自行使用yum安装。

第三节 Shell基础

历史命令与补全

history命令

语法:history [选项] [历史命令保存文件]

选项

  • -c 清空历史命令
  • -w 把缓存中得历史命令写入历史命令保存文件~/.bash_history

补充说明

  • 历史命令默认会保存1000条,可以再环境变量配置文件/etc/profile文件中修改HISTSIZE的值
  • 如果超出设置的值那么会删除最前面一条历史记录保留最新的历史记录
  • 历史命令可以使用键调出最后使用的命令,可以使用Tab键补全命令

命令别名

使用alias 别名='命令'临时更改命令别名

如果想永久生效需要在/root/.bashrc添加以上命令

bash常用快捷键

  • ctrl+A:把光标移动到命令行的开头
  • ctrl+E:把光标移动到命令行的结尾
  • ctrl+C:强制终止当前的命令
  • ctrl+L:清屏,相当于clear命令
  • ctrl+U:删除或剪切光标之前的命令,情景:我输入了一行很长的命令,不用使用退格键一个一个字符的删除,使用这个快捷键会更加方便
  • ctrl+Y:粘贴ctrl+U剪切的内容
  • ctrl+D:退出当前终端

输出重定向

概念:将命令执行的结果保存到文件中就叫做输出重定向

应用场景:系统管理员制作定时计划在某个时间执行某个脚本,之后可以查看执行的正确的或者错误的结果

标准的正确输出重定向

  • 命令 > 文件 :以覆盖的方式,把命令的正确输出输出到指定的文件或设备中
  • 命令 >> 文件 :以追加的方式,把命令的正确输出输出到指定的文件或设备中

标准错误输出重定向

  • 命令 2> 文件 :以覆盖的方式,把命令的错误输出输出到指定的文件或设备中
  • 命令 2>> 文件 :以追加的方式,把命令的错误输出输出到指定的文件或设备中

那么问题来了:我怎么知道我执行的命令是正确的还是错误的?

下面介绍下常用的一种方式:正确输出和错误输出同时保存

  • 命令 &>文件:以覆盖的方式,把正确输出和错误输出都保存到同一个文件或设备中
  • 命令 &>>文件:以追加的方式,把正确输出和错误输出都保存到同一个文件或设备中

也可以同时执行分开保存

  • 命令 >文件1 2>文件2:以覆盖的方式,把正确输出保存到文件1中错误输出保存到文件2中
  • 命令 >>文件1 2>>文件2:以追加的方式,把正确输出保存到文件1中错误输出保存到文件2中

在shell脚本中我们可能会看到将命令的执行的结果输出到/dev/null中,这个文件在linux中是一个特殊的文件可以理解成垃圾箱,如果需要执行某个命令但输出的结果毫无意义不想输出的话可以输出到这个文件中。

多命令顺序执行

;

#格式:命令1;命令2; ...
#作用:多个命令顺序执行,命令之间没有任何逻辑联系

#应用场景举例:计算复制一块磁盘使用的时间
#dd命令:dd if=源文件 of=目标文件 bs=字节数 count=个数,下面的命令是连续执行 显示复制磁盘前的时间 将/dev/zero 复制到/root/testfile文件中 每次复制1字节(即把1字节看做一个数据块) 共复制100000次(即复制100000个1个字节的数据块) 显示复制完成后的时间

date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date;

&&

#格式:`命令1&&命令2 ...`
#作用:逻辑与,当命令1正确执行,则命令2才会执行否则命令2不会执行

#应用场景举例:安装源码包软件时候,下面的例子表示只有前面的指令执行正确后面的才执行

./configure && make && make install

||

#格式:`命令1||命令2 ...`
#作用:逻辑或,当命令1执行不正确,则命令2才会执行否则命令2不会执行

#应用场景举例:下面例子测试前面执行报错(./aaa不存在)后面才执行,结果报错并显示yes

ls ./aaa || echo ‘yes’

管道符

格式:命令1 | 命令2

作用:命令1的正确输出作为命令2的操作对象

举例:使用grep(原作用只支持在文件里使用) 搜索列出/tec/目录下包含abc的文件

ll /etc/ | grep 'abc'

通配符

应用场景:搜索文件名使用

  • ?:匹配一个任意字符,如ls ./?bcd命令表示如果当前目录有abcd就会显示出来
  • *:匹配0个或任意多个任意字符
  • []:匹配中括号中任意一个字符,例如[abc]代表一定匹配一个字符a或者b或者c
  • [-]:匹配中括号中任意一个字符,-代表一个范围,例如[a-z]代表匹配a-z任意一个小写字母
  • [^]:逻辑非,匹配不是中括号中内的一个字符,例如[^a-z]代表匹配不是a-z中一个小写字母

Bash中其他特殊符号

  • '':单引号。和PHP类似,单引号里的内容就是普通的字符串
  • "":双引号。和PHP类似,双引号里的内容会解析变量$转义符\
  • ``:反引号。反引号括起来的内容是系统命令,在bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。
  • $():作用同上
  • #:在shell脚本中,#开头的行代表注释(除了#!/bin/bash表示声明shell文件外)
  • $:用于调用变量的值,声明变量不需要调用需要在变量名称前加上$
  • \:转义符号,在\之后的特殊符号失去特殊含义,变为普通字符如\$将输出"$"符号,而不当做是变量引用

第四节 环境变量

概念

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。 -- 来自百度百科

声明

export 环境变量名=值:环境变量名=值 ...

查询环境变量

env

删除环境变量

unset 变量名
#删除普通变量也是使用该命令

重点了解:PATH环境变量

作用

PATH环境变量的作用就是系统查找命令的路径,我们知道要想运行脚本就必须使用相对或者绝对路径运行,然而系统中有一些可执行文件是直接输入名称就可以执行的,这就是PATH环境变量起得作用。

变量叠加

举个栗子,执行以下命令

export PATH=/usr/local/bin  #设置 /usr/local/bin 目录为PATH路径
export "$PATH":/root/       #叠加变量命令
echo $PATH          #输出环境变量我们可以得到PATH的值为/usr/local/bin:/root/

环境变量配置文件

简介

环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH、HISTSIZE、PS1、HOSTNAME等默认环境变量

Source命令

语法:source 环境变量配置文件名 作用:使更改环境变量的配置文件即刻生效 也可以使用. 配置文件命令作用同source

环境变量配置文件

下面针对所有登录用户的环境变量配置文件

1./etc/profile 2./etc/profile.d/*.sh 3./etc/bash

下面是针对当前登录用户的环境变量配置文件

1.~/.bash_profile 2.~/.bashrc

环境变量配置文件的优先级

注意事项

环境变量会在当前的Shell和这个Shell的所有子Shell当中生效,通过命令行设置的环境变量只在本地登录有效,如果注销或者重启后需要一直生效则需要写在配置文件中。定义环境变量时候后边执行文件的变量会覆盖前面设置的,除非使用变量叠加的方式