Shell基础

Shell基础

一、Shell概述

1. Shell介绍
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
Shell基础_第1张图片
2. Shell的分类
Bourne Shell:从1979起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh。
C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名。
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、Bash、psh、zsh;C家族主要包括:csh、tcsh。
Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

3. Linux支持的Shell
/etc/shells(该文件中列有当前Linux系统支持的Shell)

二、脚本执行方式

1、echo输出命令

echo [选项] [输出内容]
选项:
- -e:支持反斜线控制的字符转换
echo -e "hell\bo"
# 删除\b左侧字符
echo -e "h\te\tl\n\to"
# 制表符与换行符
echo -e "\x68\t\x65"
# 按照十六进制ASCII码也可以输出
# 此外,echo命令还可以设置字体颜色等。

2. 第一个脚本

执行vi hello.sh
脚本中的内容(第一句不是注释,是不能省略的,其他#号的句子代表注释):
#!/bin/bash
#The first program 

echo -e "\3[1;34m Helloworld!\e[0m"

3. 脚本执行

赋予执行权限,直接运行:
chmod 755 hello.sh
./hello.sh(或者用绝对路径来调用)

通过Bash调用执行脚本
bash hello.sh

三、Bash的基本功能

1. 命令别名与快捷键

alias
# 查看系统中所有的命令别名

alias 别名='原命令'
#设定命令别名,该设定在下一次重启失效
alias ls='ls --color=never'
  • 别名的永久生效与删除别名
vi ~/.bashrc
# 写入环境变量配置文件,修改该文件后重新登录永久生效。

source .bashrc
# 让环境变量直接生效

unalias 别名
# (临时)删除别名,下次重启时,如果配置文件中还有该别名,则该别名仍然生效

Shell基础_第2张图片

  • 命令生效顺序
 第一顺位执行用绝对路径或相对路径执行的命令。
 第二顺位执行别名。
 第三顺位执行Bash的内部命令。
 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。(用echo $PATH查询目录)
  • 常用快捷键
ctrl+c   强制终止当前命令
ctrl+l   清屏
ctrl+a   光标移动到命令行首
ctrl+e   光标移动到命令行尾
ctrl+u   从光标所在位置删除到行首
ctrl+z   把命令放入后台(不要用该命令来终止命令)
ctrl+r   在历史命令中搜索

2. 历史记录

1.历史命令

history [选项] [历史命令保存文件]
选项;
- -c: 清空历史命令
- -w: 把缓存中的历史命令写入历史命令保存文件~/.bash_history

历史命令默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改。

历史命令的调用
- 使用上、下箭头调用以前的历史命令
- 使用"!n"重复执行第n条历史命令
- 使用"!!"重复执行上一条命令
- 使用"!字串"重复执行最后一条以该字串开头的命令

2.命令与文件补全

在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按”Tab”键就会自动进行补全。

3. 输出重定向

  1. 标准输入输出
设备 设备文件名 文件描述符 类型
键盘 /dev/stdin 0 标准输入
显示器 /dev/stdout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出

2. 输出重定向

类型 符号 作用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中。
标准输出重定向 命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的文件或设备当中。
标准错误输出重定向 错误命令 2> 文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。
标准错误输出重定向 错误命令 2>> 文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中。

这种输出重定向需要明确知道当前命令是否为错误命令,所以实际应用很少。

类型 符号 作用
正确输出和错误输出同时保存 命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 >> 文件 2>&1(若正确输出,直接写入文件;若错误输出,把错误结果写入正确结果中,然后再将结果写入文件中) 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 &> 文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。
命令 &>> 文件 以追加的方式,把正确输出和错误输出都保存到同一个文件当中。
命令>>文件1 2>>文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中。
ls &>/dev/null
# 相当于将命令丢入黑洞中,该命令结果会完全消失,用于不需要显示命令结果(过程)的情况。

3.输入重定向

[root@localhost ~]# wc [选项][文件名]
选项:
-c: 统计字节数
-w: 统计单词书
-l: 统计行数

命令 < 文件:把文件作为命令的输入
如: wc < access.log

命令 << 标识符
如: wc << ddy
>jagja
>hgo
>ddy(标识符)

- 标识符把标识符之间的内容作为命令的输入

4. 多命令顺序执行

  • 多命令执行符
多命令执行符 格式 作用
; 命令1; 命令2 多个命令顺序执行,命令之间没有任何逻辑联系(前面的命令报错不会影响后面的命令执行)
&& 命令1 && 命令2 逻辑与,当命令1正确执行,则命令2才会执行;当命令1执行不正确,则命令2不会执行
|| 命令1||命令2 逻辑或,当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不会执行
date ; tar -zcvf etc.tar.gz /etc ; date
# 查看压缩使用时间
ls && echo yes || echo no
# 若ls正确执行,则打印yes;若ls命令错误,则打印no(使脚本判断更简单)
lssjgajoa || echo no && yes
# 根据逻辑,当第一条命令错误,这三条命令都会执行,因此用来判断正确还是错误时,应该逻辑与在前,逻辑或在后
  • 管道符
命令格式:
[root@localhost ~]# 命令1 | 命令2 
# 命令1的正确输出作为命令2的操作对象(因此,命令1若报错, 命令2不会执行),
# 命令2必须要可以操作命令1的输出结果

举例:more 文件名: 分屏显示,用于查看文件当中的内容(不能直接查看命令的执行结果)
[root@localhost ~]# ls -l /etc > abc
[root@localhost ~]# more abc
# 首先将ls的结果通过输出重定向保存在文件abc中,再通过more命令来查看这个文件,
# 这样就可以分屏显示命令的结果。(使用ls时,当该目录文件非常多,而命令窗口显示
# 的行数有限,可能前面的一些显示就无法看到了)
[root@localhost ~]# ls -l /etc | more
# 将ls的结果作为more的操作对象

netstat -an | grep ESTABLISHED
# 用于查看端口情况,查看连接状态为ESTABLISHED的端口情况

netstat -an | grep ESTABLISHED | wc -l
# 查看连接状态为ESTABLISHED的端口情况并统计有多少个端口连接

5. Shell中特殊符号

  • 通配符
通配符 作用
? 匹配一个任意字符
* 匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者匹配a ,或者匹配b,或者匹配c。
[-] 匹配括号中的任意一个字符, -代表一个范围。例如:[a-z]代表匹配一个小写字母。
[^] 逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符。
  • Bash中其他特殊符号
符号 作用
单引号。在单引号中所有的特殊符号,如’$’和’`’(反引号)都没有特殊含义。
“” 双引号。在双引号中特殊符号都没有特殊含义,但是”$”和”`”和”\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊函数。
反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。
$() 和反引号作用一样,用来引用系统命令。
# 在Shell脚本中,#开头的行代表注释。
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。
\ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用。
# 将命令赋给变量aa,并打印命令的结果
aa=$(ls)
echo "$aa"

你可能感兴趣的:(linux)