shell基础及Bash的基本功能是本站提供的视频讲解笔记,是慕课网的教程,为什么要学习shell,是因为有shell可以很轻松的远程控制Linux主机,只有掌握了shell才能够很好的配合学习Linux课程。
shell基础:
shell基础:
一、shell概述
1、shell :
◆是一个命令行解释器,为用户提供给呢了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以启动、挂起、停止甚至编写一些程序。
◆还是一个功能强大的编程语言,易编写,易调试,灵活性较强。shell是解释执行的脚本语言,在shell中可以直接条用Linux系统命令。


2、shell分类:
Bourne Shell :1979年起Unix就开始使用,它的主文件名为sh。
C shell :主要在BSD版本的Unix系统中使用,其语法和C语言相类似而得名。
shell的两种主要语法类型彼此不相兼容。Bourne Shell 主要包括sh ksh bash psh zsh ,其中bash是现在使用的标准shell,查看使用的shell版本命令:echo $SHELL ; C主要包括csh tcsh;
Bash : Bash与sh兼容,现在使用的Linux就是Bash作为用户的基本shell
3、Linux支持的shell
用命令打开文件查看:vi /etc/shells
可以看到支持 sh bash tcsh csh ,输入任意一个即可进入该shell模式,退出用exit命令
二、脚本执行方式
1、echo输出命令
echo [选项] [输出内容] 选项:-e :支持反斜线控制的字符转换,具体如下
控制字符 作用
\a 输出警告音
\b 退格键,也就是向左删除键
\n 换行符
\r 回车键
\t 制表符,也就是Tab键
\v 垂直制表符
\0nnn 按照八进制ASCLL码表输出字符,其中0为数字0,nnn是三位八进制数
\xhh 按照16进制ASCLL码表输出字符,hh是两位16进制数
例子:echo -e "\x68\t\x65\t\x6c\n\x6c\t\x6f\t" #按照16进制ASCLL码输出内容
注意:输出的内容有空格,所有内容之间需要加引号。
echo输出颜色
30m=黑色 31m=红色 32m=绿色 33m=黄色 34m=蓝色 35m= 洋红 36m=青色 37m=白色 例如:echo -e "\e[1;31m 娶人就要娶美女 \e[0m " \e 代表标准颜色 [1; 代表开启颜色选项 \e[0m 代表关闭颜色和选项
2、第一个脚本(脚本创建)
# vi hello.sh
创建系统脚本
#!/bin/bash
加#代表后续内容为注释,但这句话不是;这里声明是Linux标准脚本 ,而且不能省略
#the first program
这句话是注释,一般好习惯都需要加注释
echo -e "\e[1;34m 天上掉下个林妹妹 ! \e[0m"
输出打印脚本
:wq
保存退出
3、脚本执行(两种方式)
◆赋予执行权限,直接运行
→chmod 755 hello.sh #赋予执行权限
→./hello.sh #执行./当前目录下的脚本文件(也可以为绝对路径)
◆通过Bash调用执行脚本
→bash hello.sh #用bash来直接执行脚本文件
三、Bash的基本功能
1、命令别名(更好适应用户使用习惯,有退出即无效也有用久生效)与快捷键
⑴、查看与设定别名命令(暂时生效):
alias #查看系统中所有的命令别名
alias 别名='原命令' #设定命令别名
⑵、别名用久生效与删除别名(打开配置文件并添加,重新登陆后用久生效)
vi ~/.bashrc #写入环境变量配置文件,这个~/.bashrc 是root用户文件位置,配置文件有很多,后面再补充。也可以直接调用source .bashrc文件,不用重新登陆就生效。
unalias 别名 #删除别名,临时删除。用久删除和添加一样。
⑶、命令生效顺序
第一位:执行用绝对或相对路径执行的命令
第二位:执行别名
第三位:执行Bash的内部命令
第四位:执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
⑷、常用快捷键(ctrl+选项)
ctrl+c 强制终止当前命令
ctrl+l 清屏,同clear
ctrl+a 光标移动到命令行首
ctrl+e 光标移动到命令行尾
ctrl+u 从光标所在位置删除到行首
ctrl+z 把命令放入后台执行
ctrl+r 在历史命令中搜索
2、历史命令(将使用过的命令进行保存,方便日后使用)
⑴、历史命令
history [选项] [历史命令保存文件](已经有的文件名可以忽略不写)
选项: -c:清空历史命令 -w:把缓存中的历史命令写入保存 ~/.bash_history
历史命令默认会保存1000条,可以在配置文件/etc/profile中进行修改
HISTSIZE=1000 历史命令建议不进行清空,可以查看出错或者查看黑客活动。
⑵、历史命令的调用
◆、上下箭头调用以前的历史命令
◆、使用"!n"重复执行第n条历史命令
◆、使用"!!"重复执行上一条命令
◆、"!字串"重复执行最后一条以该字串开头的命令,如 !ls
⑶、命令与文件的补全
在Bash中,按Tab键自动补全命令与文件。命令补全依赖echo $PATH,文件补全依赖目录。当命令出错时,按键没有任何反应。
3、输出重定向
⑴、标准输入输出
设备 设备文件名 文件描述符 类型
键盘 /dev/stidn 0 标准输入
显示器 /dev/sdtout 1 标准输出
显示器 /dev/sdterr 2 标准错误输出
⑵、输出重定向(把原来输出到显示器的重定向输出到文件)
输出重定向类型 命令模式 命令用法
标准正确输出 命令> 文件名 以覆盖方式把命令的正确输出输出到指定文件或设备中
标准正确输出 命令>> 文件名 以追加方式把命令的正确输出输出到指定文件或设备中
标准错误输出 错误命令 2>文件 以覆盖方式把命令的错误输出输出到指定文件或设备
标准错误输出 错误命令 2>>文件 以追加方式把命令的错误输出输出到指定文件或设备
重定向意义:在无人值守的命令执行过程中,把输出保存到文件中,方便查阅
例如:ifconfig > test.log #重定向到文件(正确输出左右都有空格)
cat test.log #查阅文件
datecang 2>>test.log #重定向错误命令到文件(注意2后面没有空格)
正确输 命令 > 文件 2>&1 以覆盖方式把命令的正确和错误输出输出保存到同一文件
出和错 命令 >> 文件 2>&1 以追加方式把命令的正确和错误输出输出保存到同一文件


误输出 命令 &>文件 以覆盖方式把命令的正确和错误输出输出保存到同一文件
同时间 命令 &>>文件 以追加方式把命令的正确和错误输出输出保存到同一文件
注释:最上面两个命令和上面两个命令效果是一致的
例如:ls xiaodianying &>>test3.log ls xiaodianying >> test.log 2>&1
ls &>/dev/null /dev/null是系统黑洞文件,保存进去就会消失,视作垃圾袋
保存 命令 >> 文件1 2>>文件2 正确输出追加到文件1,错误输出追加到文件2
例如:cat xdy >> access.log 2>>error.log
⑶、输入重定向
wc键盘输入统计命令(默认全部统计)
语法:wc [选项] [文件名]
选项:-c 统计字节数
-w 统计单词数
-l 统计行数
例如:# wc 然后输入一堆文字保存(CTRL+D),就会显示行数、字节数、单词数
wc统计命令输入重定向
◆命令 < 文件把文件作为命令输入 例如:wc < access.log
◆命令 << 标识符 例如:wc << abc
... 当输入的内容里面出现abc
标识符把标识符之间内容作为命令的输入 就会统计之间的行数、字节、字符数
4、多命令顺序执行
⑴、多命令执行符 格式 作用
; 命令1; 命令2 多命令顺序执行,命令之间没有任何逻辑联系
&& 命令1 && 命令2 逻辑与,当命令1正确执行,命令2才会执行;当命令1执行不正确,则命令2不会执行
|| 命令1 || 命令2 逻辑或,当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不会执行
例如: date ; tar -zcvf etc.tar.gz /tec ; date
ls && echo yes
ls && echo yes || echo no 如果ls报错,就打印no,正确执行打印yes
注意:分号 ; 执行的命令比较灵活,运用也不需要考虑命令执行对错,而且就算前面命令出错,也不会影响到后面的命令继续执行。&& 两个命令之间有简单的逻辑关系
⑵、管道符(比逻辑与和逻辑或应用更为广泛)
命令格式: 命令1 | 命令2 #命令1的正确输出作为命令2的操作对象
more 文件名(对象) #分屏查看文件内容
ls -l /etc | more #将/etc里面的详细内容结果用分屏显示
ll -a/etc/ | more
netstat -an | grep ESTABLISHED #查询系统所有的网络连接作为结果去查询匹配字符串ESTABLISHED结果的行,ESTABLISHED(正向连接)代表一个网络客户端 192.168.0.156:22 前面为IP,22为端口
netstat -an | grep ESTABLISHED | wc -l #[双管道符]将上面匹配结果进行行数统计
⑶、通配符(和正则表达式中将的一致)
通配符 作用
? 匹配一个任意字符
* 匹配0个或者多个任意字符,即匹配任何内容
[] 匹配括号中任意一个字符,[abc],匹配abc中任意一个
[-] 匹配括号中任意一个字符,-代表一个范围,如[a-z]
[^] 逻辑非,表示匹配不是括号中內的字符,如[^0-9]匹配非数字的字符
例子:
ls dzp [0-9] 结果:dzp3 dzp2
ls dzp [0-9] [0-9] 结果:dzp34
ls dzp [^0-9] 结果:dzpb
ls dzp [^0-9]* 结果:dzpblos dzpcangls
5、shell中特殊符号
符号 作用
' ' 单引号中的所有特殊符号,都没有特殊含义。如$、反引号`
" " 双引号中的所有特殊符号,都没有特殊含义。$、`、\、例外,分别表示调用变量的值、引用命令、转义符
` ` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错
$() 引用系统命令
# #开头代表注释
$ 用于调用变量的值,如果需要调用变量name的值时,需要用$name的方式得到变量的值
\ 转义符,在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出$符号,而不当做变量引用。
注释:单引号里面都认为是字符串,包括一些特殊符号。
双引号里面$、`、\、例外,分别表示调用变量的值、引用命令、转义符
echo `ls` echo $(ls)