一、shell概述
- shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。还是一个功能强大的编程语言,是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
- shell的分类
Shell两种主要语法类型(彼此不兼容)
Bourne Shell(sh ksh Bash psh zsh)
C Shell(csh tcsh)
echo $SHELL可查看当前计算机运行的shell - Linux支持的shell
打开/etc/shells可查看
二、脚本执行方式
- echo输出命令
echo 【选项】 【输出内容】
选项:
-e 支持反斜线控制的字符转换
(\a 输出警告音
\b 退格键,向左删除键
\n 换行符
\r 回车键
\t 制表符,也就是Tab键
\v 垂直制表符
\0nnn 按照八进制ASCII码表输出字符,nnn是三位八进制数
\xhh 十六进制,hh是两位十六进制数)
eg: echo -e “hell\bo”
echo -e “h\te\tl\nl\to\t”
echo -e “\x68\t\x65\t\x6c\n\x6c\t\x6f\t” - 写第一个脚本
vim hello.sh
注意写上注释
#!/bin/bash
#第一个shell脚本
echo -e “\e[1;34m 天上掉下个猪八戒 \e[0m”
#"\e[1;34m xxxxxx \e[0m" 给文字加上颜色 - 脚本执行
赋予执行权限,直接运行
chmod 755 hello.sh
./hello.sh 或者 /root/hello.sh
通过Bash调用执行脚本
bash hello.sh
三、Bash的基本功能
- 命令别名与快捷键
查看与设定别名
alias
#查看系统中所有de命令别名
alias 别名=‘原命令’
#设定命令别名,只在本次登录有效
别名永久生效与删除
vi ~/.bashrc
#写入环境变量配置文件,重启或source .bashrc后,可永久生效
unalias 别名
#删除别名
命令生效顺序
1.执行用绝对路径或相对路径执行的命令
2.执行别名
3.执行bash的内部命令
4.执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
常用快捷键
ctrl+c 强制终止当前命令
ctrl+l 清屏
ctrl+a 光标移动到命令行首
ctrl+e 光标移动到命令行尾
ctrl+u 从光标所在位置删除到行尾
ctrl+z 帮命令放入后台
ctrl+r 在历史命令中搜索 - 历史命令
history 【选项】
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
历史命令的调用
使用上下箭头调用以前的历史命令
使用"!n"重复执行第n条历史命令
使用“!!”重复执行上一条命令
使用“!字串”重复执行最后一条以该字串开头的命令 - 输出重定向
标准输出重定向
命令 > 文件
#以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
命令 >> 文件
#以追加的方式,把命令的正确输出输出到指定
的文件或设备当中
eg:
ls > test.log
ls >> test.log
标准错误输出重定向
错误命令 2> 文件
#以覆盖的方式,把命令的错误输出输出到指定
的文件或设备当中
错误命令 2>> 文件
#以追究的方式,把命令的错误输出输出到指定
的文件或设备当中
eg:
lsss > error.log
lsss >> error.log
正确输出和错误输出同时保存
命令 > 文件 2>&1
命令 &> 文件
#以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
命令 >> 文件 2>&1
命令 &>> 文件
#以追加的方式,把正确输出和错误输出都保存到同一个文件当中
命令 >>文件1 2>>文件2
#把正确的输出追加到文件1中,把错误的输出追加到文件2中
eg:
ifconfig >> test.log 2>&1
ifconfig >> test.log 2>>error.log
输入重定向
wc < test.log
即wc test.log
wc 【选项】【文件名】
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数 - 多命令顺序执行与管道符
多命令顺序执行
命令1;命令2
#多个命令顺序执行,命令之间没有任何逻辑联系
命令1&&命令2
#逻辑与
命令1正确执行,命令2才会执行
命令1执行不正确,命令2不会执行
命令1||命令2
#逻辑或
命令1执行不正确,命令2才会执行
命令1正确执行,命令2不会执行
管道符
命令1 | 命令2
#命令1的正确输出作为命令2的操作对象
eg:
ls -l /etc | more(more分屏显示) - 通配符与特殊符号
通配符
? 匹配任意一个字符 * 匹配任意多个任意字符
[ ] 匹配中括号中任意一个字符
[-] 匹配中括号中任意一个字符,-代表一个范围。
eg:[a-z]代表匹配一个小写字母
[^] 逻辑非,表示匹配不是中括号内的一个字符。
eg:[^0-9]代表匹配一个不是数字的字符
Bash中其他特殊符号
’ ’ 单引号。在单引号中所有的特殊符号
" " 双引号。在双引号中特殊符号都没有特殊含义
`` 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。
$() 和反引号作用一样,用来引用系统命令。
#在Shell脚本中,#开头的行代表注释。
$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。
\ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用。