当前位置:   article > 正文

shell基础--简介及基础操作命令_shell脚本基本命令

shell脚本基本命令

目录

一、shell简介

1、查看shell类型

2、echo命令

1)子选项:

2)-e控制字符的列表

echo能够识别的颜色

三、shell脚本执行方式

1、shell脚本3种执行方式

四、EOF的脚本使用方式

五、bash的主要功能

1.history:

history 【子选项】

2、补全功能

3、别名功能

3、命令执行的顺序

4、hash命令

六、bash常用快捷键

七、输入输出重定向

1、bash的标准输入输出

2、输出重定向

3、输入重定向(wc、tee)

tee命令功能:

八、grep和find

1、grep行提取命令

2、find和grep查找的区别

九、管道符:|格式“命令1|命令2

十、通配符

十一、bash中其他特殊符号

          1、单引号和双引号

 2、反引号

3、小括号、中括号和大括号


一、shell简介

conputer resources:计算机资源

kernel:内核

shell:命令解释器

programs:程序

utilities:实用工具

tools:工具

        一个完整的计算机包括硬件与软件。软件又分系统软件与应用软件。负责对硬件进行管理与操作的是系统软件的内核(kernel)部分,用户是无法和内核打交道的,用户只能通过应用程序或部分系统软件发出指令,这些指令会被翻译并传给内核。在Linux内核的系统下,可以通过shell和内核进行沟通,从而达到使用计算机资源的目的。每当用ssh工具远程连接到系统时,或在服务器前输入密码后。那个跳动的光标就是一个shell。shell是指命令解释器,为用户和操作系统之间通信提供的一种接口。

        shell不光是命令解释器,还是一种编程工具,称为脚本语言。与编译型语言(C/C++,java等)不同,脚本语言又称为解释型语言,这种经过语言的特点在于经过编写后不需要做任何编译就可以运行。

1、查看shell类型

        目前redhat和centos发行版中默认有多种shell,C6在/etc/shellC7可以在/etc/shells文件中进行查看:

在Linux中/bin/bash是Linux默认的shell,那么bash shell就是我们要重点学习的部分。

2、echo命令

【】echo [选项] [输出内容]

1)子选项:

-e:支持反斜线控制的字符转换。

-n:取消输出后行末的换行符号即内容输出后不换行。

例:

[root@localhost ~]# echo "Linux-BEIJING-YUN"

Linux-BEIJING-YUN

[root@localhost ~]# echo -n "Linux-BEIJING-YUN"

Linux-BEIJING-YUN[root@localhost ~]#

(如果加入了-n选项,输出内容结束后,不会换行二十直接显示新行的提示符。

在echo命令中如果使用了“-e”选项,则可以支持控制字符,如下表所示:

2)-e控制字符的列表

控制字符

作用

\\

输出\本身

\a

输出警告音

\b

退格键,也就是向左删除键

\c

取消输出行末的换行符。和“-n”选项一致。

\e

ESCAPE键(具有向右删除功能)

\f

换页符

\n

换行符

\r

回车键

\t

制表符(TAB键)

\v

垂直制表符

\0nnn

按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数

\xhh

按照十六进制ASCII码表输出字符。其中hh是两位十六位进制数

例:

【】# echo -e "\\ \a"

\

#这个输出会输出\。同时也有提示

音。

【】# echo -e "ab\bc"

ac

#只输出了ac,因为在b右侧有\b。所

以只能输出ac。反斜线b后要有字符或空格。否则不生效。

【】# echo -e "a\tb\tc\nd\te\tf"

a b c

d e f

#加入了制表符和换行符,所以输出

会按照加入的格式进行输出。

【】# echo -e "\0141\t\0142\t\0143\n\0144\t\0145\t\0146"

a b c

d e f

#还是会输出上面的内容,不过是按

照八进制ASCII码输出。

【】# echo -e "\x61\t\x62\t\x63\n\x64\t\x65\t\x66"

a b c

d e f

#十六进制ASCII码同样可以输出

echo命令还可以进行一些颜色上的输出:

【】# echo -e "\e[1;31m abcd \e[0m"

abcd

#这条命令会把abcd按照红色输出。

\e[1是标准格式,代表颜色输出开始,\e[0m代表颜色输出结束。31m定义字体颜色是红色。

echo能够识别的颜色

如下:   30m=黑色,31m=红色,32m=绿色,33m=黄色,34m=蓝色,35m=洋红,36m=青色,37m=白色。以上这些数字+10就会变成底色。比如41m就是把字体底色变成红 色。

【】# echo -e "\e[5;1;31m abcd \e[0m"

#加上数字5为输出字符串红色闪烁。

三、shell脚本执行方式

1、shell脚本3种执行方式

3种方式

  1. 绝对/相对路径      需要可执行权限(x) 在子shell中执行
  2. bash 文件路径     不需要可执行权限    会开启字shell,在子shell                                                                    中执行
  3. .或source文件路径 不需要可执行权限    在当前shell执行(应用在修                                          改环境变量配置较多)

【】# chmod 755 hello.sh

【】# /root/hello.sh

北京

【】# ./hello.sh

北京

#脚本要赋予执行权限才能正常执行,执行方式有以上两种。

【】# chmod -x hello.sh

【】# /root/hello.sh

-bash: /root/hello.sh: 权限不够

【】# . hello.sh

北京

【】# bash ./hello.sh

北京

#当没有执行权限的时候,可以通过bash 【脚本】或 . 【脚本】的方式来执行脚本。

四、EOF的脚本使用方式

【】# vim p.sh #写入以下内容

#!/bin/bash

cat <<efo

========================

1.mysql

2.httpd

3.oracle

=======================

efo

【】# chmod +x

【】# p.sh #查看效果

五、bash的主要功能

1.history

        历史命令功能,可以用上下箭头来找到之前执行过的命令,系统默认情况下会记录1000条历史命令。因为有这项功能,可以轻易的找到自己之前执行过哪些操作,这对排错有很大帮助。这些历史命令会被记录在~/bash.history,但记录的是上次登录以前所执行过的命令,而当前执行的命令都会被暂时存放在内存中,当成功注销系统后,这些历史命令才会记录到~/.bash_history中去。如果想修改默认记录的历史命令条数,编/etc/profile配置文件,找到HISTSIZE,后边的数字就是会记录历史命令的条数。

history 【子选项】

子选项:-c

清空历史命令

-w

把缓存中的历史命令写入历史命令的保存文件中。如果不手工指定历

史文件保存文件,则放入默认历史命令保存文件,~/.bash_history

历史命令的调用:

使用“↑↓”箭头调用以前的历史命令。

使用”!n“重复执行第n条历史命令。

使用“!!”重复执行上一条命令。

使用”!字符串“重复执行最后一条以该字符串开头的命令。

使用“!$“重复上一条命令的最后一个参数。例:

        (打开的就是/etc/fstab)(还有个操作技巧,就是在cat /etc/fstab之后。输入vim然后

按下esc键,松开后按.即可把之前命令的执行对象调用出来)

2、补全功能

        此功能可以自动补全文件或命令。只要输入命令或文件的开头几个字母然后按TAB键,系统就会自动补齐命令或文件名。并且,输入的字符越多补齐的范围越小,就越精确。拥有这样的功能不单能让用户在操作时能提高速度,而且也能提高准确性。因为,如果要用一个命令或要修改一个配置文件的时候,用TAB不能补全出来,那么就说明这个命令不存在或者文件不存在。

        在Centos7当中增强了补全功能,不仅仅能够补全命令。还可以补全命令之后的选项,启动服务的服务名称等。

3、别名功能

        很多最早接触Linux的工作人员习惯于用vi编辑文件,但vim比vi功能更加强大。比如vim提供了语法校验与颜色显示功能。对于熟悉了vi命令的工作人员来说alias别名功能可以在不影响原有工作习惯的情况下使用vim带来的便利。具体操作如下:

 (直接用alias查看系统中已经定义好的别名)

(定义别名的格式为:alias 别名=原命令)

接下来我们继续进行一个小实验

        (我们定义一个别名ls=cd,当我们照常想用ls查看/etc/内容时。结果是将我们的所在位置切换成了/etc/中。由此可见,别名不能随意设置。但......可用\命令取消特殊含义 也可使用绝对路径)

(我们也不是一点办法都没有,比如可以用命令的绝对路径来执行命令)

(unalias ls 关闭ls的别名、unalias -a 关闭所有别名)

由上边的实验也引出了

3、命令执行的顺序

1)第一顺位是绝对命令或相对路径执行的命令

2)第二顺位别名

3)第三顺位执行bash的内部命令。比如:cd、pwd等

4)第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

        echo $PATH 用alias设置的别名都是临时生效的,重启后失效。如果想让别名永久生效需要修改环境变量配置文件~/.bashrc文件。如果想让别名对所有用户生效,需要修改/etc/bashrc配置文件。

将脚本放置其中即可直接使用

4、hash命令

        Linux系统下会有一个hash表,最初开机时这个hash表为空,每当执行过一条外部命令hash表都会记录下命令的绝对路径(因为外部命令会通过PATH“环境变量”去找命令的绝对路径)而hash表会记录下所使用命令的路径,相当于一个缓存。也就是说,在执行外部命令的时候,会首先去查找hash表,如果有响应的路径就不必去查找PATH。而在使用hash命令之后会显示两列内容信息,其中hits表示为“开机后命令执行次数”。command为“查找到命令的绝对路径位置”。

        为验证hash命令可以使用hash命令手工添加一条hash记录,然后再去执行响应的命令查看效果即可:

【】# hash -p /bin/touch mkdir

#-p添加缓存记录,指定/bin/touch命令为mkdir命令执行时路径。

【】# mkdir test1

【】# ll test1 #查看xdl的文件属性,就会发现mkdir创建test为文件而不是目录。

【】# hash -r #清空hash缓存记录。

六、bash常用快捷键

快捷键

作用

CTRL+a

把光标移动到命令行开头。

CTRL+e

把光标移动到行尾。

CTRL+c

强制终止当前命令。

CTRL+l

清屏,相当于clear命令。

CTRL+u

删除或剪切光标之前的内容

CTRL+k

删除或剪切光标之后的内容。

CTRL+y

粘贴CTRL+u或CTRL+k剪切的内容。

CTRL+r

在历史命令中搜索。按下CTRL+r之后,就会出现搜索界面。只要输入搜索内容,就会从历史命令中索搜。

CTRL+d

退出当前终端。

CTRL+z

暂停并放入后台。(jobs命令查看挂起的进程。bg %N使第N个任务放入后台。 fg %N使第N个任务在前台运行。)

CTRL+s

暂停屏幕输出。

CTRL+q

恢复屏幕输出。

七、输入输出重定向

1、bash的标准输入输出

设备

设备文件名

文件描述符

类型

键盘

/dev/stdin

0

标准输入

显示器

/dev/stdout

1

标准输出

显示器

/dev/stderr

2

标准错误输出

2、输出重定向

类型

符号

作用

标准输出重定向

命令 > 文件

以覆盖的方式,把命令的正确输 出输出到指定的文件或设备中。

命令 >> 文件

以追加的方式,把命令的正确输 出输出到指定的文件或设备中。

标准错误输出重定向

错误命令 2> 文件

以覆盖的方式,把命令的错误输出输出到指定的文件或设备中。

错误命令 2>> 文件

以追加的方式,把命令的错误输出输出到指定的文件或设备中。

正确输出和错误输出同 时

保存

命令 > 文件 2>&1

以覆盖的方式,把正确输出和错 误输出都保存到同一个文件当中。

命令 >> 文件 2>&1

以追加的方式,把正确输出和错 误输出都保存到同一个文件当中。

命令 &>文件

以覆盖的方式,把正确输出和错 误输出都保存到同一个文件当中。

命令 &>>文件

以追加的方式,把正确输出和错 误输出都保存到同一个文件当中。

命令>>文件1 2>>文件2

把正确的输出追加到文件1中,把 错误的输出追加到文件2中。

3、输入重定向(wc、tee)

命令:wc   统计指定文件中的行数,单词数,字数,并将统计结果显示输出。

选项   文件名

选项:

 -c  统计字数(字符)

-w   统计单词数(字符串,由空白、跳格或换行字符分隔的字符串。

-l  统计行数

实例:

tee命令功能:

读取标准输入的数据,并将其内容输出成文件。

语法:tee [-a][--help][--version][文件...]

参数:

-a, --append 内容追加到给定的文件而非覆盖

--help 在线帮助

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件

例1:将磁盘使用的信息写入文件

【】# df -h | tee disk.log

例2:将文件系统使用的信息追加到文件

【】# df -h | tee -a disk.log

注: 可以使用来记录日志

八、grep和find

1、grep行提取命令

格式:grep 子选项 ”关键词“ 文件名

选项:-A数字 #列出符合条件的行,并连续列出后续n行(如果小写,那么会列出前后

n行)。

-B数字 #列出符合条件的行,并连续列出前面n行(如果小写,那么会列出前后

n行)。

-c #统计符合条件的字符串行数

-i #忽略大小写

-n #输出行号

-v #反向查找(取反)

-o #只列出关键字- - color=auto #搜索出的关键词高亮显示

例:

(在/etc/passwd中查找root行显示后续4行,列出行号并且高亮显示关键词这里我们用的选

项是小写a,所以显示了前后4行。)

2、find和grep查找的区别

find查找:

        find命令是在系统中搜索符合条件的文件名,如果需要模糊查询就要使用通配符进行匹

配,搜索时文件名是完全匹配

(我们创建了两个文件分别为abc、abcd在用find查找文件名abc时,只看到了abc文件。说

明了grep命令查找为完全匹配。虽然abcd包含abc,但是也不会被找到。)

grep查找:

        grep命令是在文件这种搜索符合条件的字符,如果需要模糊查询,使用正则表达式进行匹配,搜索时字符串是包含匹配。

 

(首先在test文件中输出123,然后追加字符123456。之后用grep命令在test文件中查找 123。看到查找结果有123、123456。)

九、管道符:|格式“命令1|命令2

#将命令1的结果作为命令2的执行对象

例:

ls -a /etc/ | more

#/etc目录下内容较多,显示所有的话一页显示不全,这里用

more分页显示。

rpm -qa | grep httpd #查看已经安装的rpm包,然后用grep查找是否安装

httpd netstat -an | grep "ESTABLISHED" #查询本地所有网络连接,提取包含

ESTABLISHED(已经建立连接)的行,就可以知道我们的服务器上有多少已经成功连接的网络连接。

十、通配符

用于shell命令行,或shell脚本中。正则用于字符串处理。

通配符

作用

?

匹配任意一个字符。

*

匹配0个或任意多个字符,可以匹配任何内容。

[]

匹配中括号内任意一个字符。如:[abc]代表一定匹配一个字符,或a或b或c

[-]

匹配中括号内任意一个字符,-代表一个范围。如:[a-z]代表匹配一个小写字母。

[^]

逻辑非,表示匹配不是中括号内的一个字符。如:[^0-9]代表匹配一个不是数字的字符。

实例:

(我们在目录下创建abc、abcd、012、0abc文件。ls *查看所有文件。)

(?匹配了任意一个字符,所以找到了0abc不能匹配abc因为?不能匹配空)

(匹配任何以数字开头的文件)

 

(匹配不以数字开头的文件)

十一、bash中其他特殊符号

符号

作用

''

单引号。在单引号中所有的特殊符号,如“$”和”`”反引号都没有特殊含义。

""

双引号。在双引号中特殊符号都没有特殊含义。但是“$”“·”“和”\“是例外, 拥有调用变量、引用命令和转义符的特殊含义。

``

反引号。反引号括起来的内容是系统命令,在bash中会先执行它。和$()作用一样。 更推荐使用$()因为,反引号容易和单引号混淆。

$()

和反引号作用一样,用来引用系统命令。

()

用于一串命令执行时,()中的命令会在子shell中运行。

{}

用于一串命令执行时,{}中的命令会在当前shell中执行。也可以用于变量变形与替换。

[]

用于变量测试。

#

在shell脚本中,#开头的行代表注释。

$

用于调用变量的值,如果需要调用变量name的值需要用$name的方式得到变量的值。

\

转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”

符号,而不是当做变量引用。

1、单引号和双引号

(定义变量name=hb,首先输出时用单引号。使$符变为没有特殊含义。然后,用双引号输出。调用了变量name的值。)

(首先用反引号输出date,会被识别成系统命令执行成功。但是,如果在外边加上单引号那么反引号就失去了特殊含义只是变成了一个普通符号输出。)

 
2、反引号

 

        (如果用echo直接跟ls那么只会输出ls,并不会执行ls这个命令。只有我们用反引号或者$()把ls括起来时命令才能正确引用系统命令。)

3、小括号、中括号和大括号

介绍小括号和花括号之前先要解释一个概念,那就是父shell和子shell。在我们的bash中,是可以调用新的bash的,比如:

打开一个新的bash

通过pstree命令查看进程数

发现在原有的基础上又开启了个新的bash。

结合父shell和子shell我们来解释花括号和小括号的区别。如果是用于一串命令的执行,那么花括号和小括号的区别在于:

()执行一串命令时,需要重新开一个子shell进行执行

{}执行一串命令时,在当前shell执行

()和{}都是把一串命令放在括号里,并且命令之间用;号隔开

()在命令最后可以不加分号

{}在命令最后不用分号不能正确执行

{}的第一个命令和左括号之间必须要有一个空格

()里的各命令和括号之间可以没有空格

(首先我们定义变量name=hb,然后在小括号里定义name=rs并输出查看。再用echo输出变量name显示仍然为hb。因为()里的内容是在一个新的shell里进行定义的,所以并不会影响父shell的变量。)

(然后,我们用花括号继续做相同的操作。name还是hb。用花括号定义变量name=rs。因为花括号是在父shell直接更改了之前的name变量。所以echo $name时变成了rs。)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/154327
推荐阅读
相关标签
  

闽ICP备14008679号