Shell概述 | 脚本执行方式 | history和Tab补全 | 别名与快捷键 | 输入输出重定向 | 多命令顺序执行与管道符 | 用户自定义变量
Shell是一个命令行解释器,它为用户提供一个与系统交互的工具
外层应用程序-->Shell命令解释器-->内核-->硬件
Shell还是一个强大的编程语言,易编写,易调试,灵活性较强。
Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令
常用的shell是Bash
Bash:Bash与sh兼容,现在使用的linux就是使用Bash作用用户的基本Shell
Linux支持的Shell
在这个文件下:/etc/shells
Shell使用例子:
[root@localhost ~]# sh
sh-4.1#
单用户系统修复启动的就是sh的shell
##############################################################################
脚本的执行方式
1、echo命令,输出命令
[root@localhost ~]# echo [选项] [输出内容]
选项:
-e: 支持反斜线控制的字符转换
如果中间有空格,用双引号连接,!是shell的保留字,要用感叹号,也需要用单引号引起来
[root@localhost ~]# echo "hello world!"
[root@localhost ~]# echo 'hello world!'
控制字符 | 作用 |
\\ | 输出\本身 |
\a | 输出警告音 |
\b | 退格键,也就是向左删除键 |
\c | 取消输出末行的换行符。和"-n"选项一致 |
\e | ESCAPE键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 制表符,也就式tab键 |
\v | 垂直制表符 |
\0nnn | 按照八进制ASCII码表输出字符。其中0为数字0,nnn是三位八进制数 |
\xhh | 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数 |
[root@localhost ~]# echo "abc" #输出abc
[root@localhost ~]# echo -e "ab\bc" #输出ac
[root@localhost ~]# echo -e "a\tb\tc\nd\tc\tf"
##########输出颜色
#30m=黑色 31m=红色 32m=绿色 33m=黄色
#34m=蓝色 35m=洋红 36m=青色 37m=白色
[root@localhost ~]# echo -e "\e[1;31m abcd \e[0m" #输出红色abcd
[root@localhost ~]# echo -e "\e[1;32m abcd \e[0m"
2、第一个脚本
[root@localhost ~]# vim hello.sh
#!/bin/Bash
#The first program
#Author: TENNOE
echo -e "Mr.T is the most honest man in LampBrother"
3、执行脚本
第一种
赋予执行权限,直接运行
[root@localhost ~]# chmod 755 hello.sh
[root@localhost ~]# ./hello.sh
第二钟:通过Bash调用执行脚本
[root@localhost ~]# bash hello.sh
4、在linux运行windows写的脚本
1:把windows脚本转成linux脚本
[root@localhost ~]# dos2unix windows.sh #windows转unix
[root@localhost ~]# unix2dos linux.sh #unix转windows
2:执行脚本
####################################################################################
[root@localhost ~]# history [选项] [历史命令保存文件]
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件中,默认是在~/.bash_history
历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
HISTSIZE=1000
历史命令的调用
使用上下箭头调用以前的历史命令
使用"!n"重复执行第n条历史命令
使用"!!"重复执行上一条命令
使用"!字串"重复执行最后一条以该字串开头的命令
########################################################################
别名与快捷键
[root@localhost ~]# alias 别名='原命令' #定义别名
[root@localhost ~]# alias #查看别名
命令执行时顺序
1、第一顺位执行用绝对路径或相对路径执行的命令
2、第二顺位执行别名
3、第三顺位执行Bash内部命令
4、第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令。
让别名永久生效
[root@localhost ~]# vi /root/.bashrc #修改root用户的
########################################################
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 | 暂停 并放入后台 |
ctrl+S | 暂停屏幕输出 |
ctrl+Q | 恢复屏幕输出 |
##############################################################
输出符(2和>中间不能与空格)
命令 > 文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中 |
命令 >> 文件 | 以追加的方式,把命令的正确输出输出到指定的文件或设备当中 |
错误命令 2> 文件 | 以覆盖的方式,把命令的错误输出输出到指定的文件或设备档中 |
错误命令 2>> 文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备档中 |
[root@localhost ~]# ls > abc
[root@localhost ~]# ls >> abc
[root@localhost ~]# lst 2> abc #错误提示要用2>输出
[root@localhost ~]# lst 2>> abc #错误提示要用2>输出
正确输出和错误输出同时保存到一个文件档中(2和>中间不能与空格)
命令 &> 文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件档中 |
命令 &>> 文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件档中 |
命令 >> 文件1 2>> 文件2 | 把正确的输出保存到文件1,错误的输出保存到文件2 |
把输出保存到垃圾箱(直接丢弃,不显示结果,也不保存到文件)
[root@localhost ~]# ls &> /dev/null
3、输入重定向
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
[root@localhost ~]# wc < anaconda-ks.cfg
52 147 1623
#########52行 147个单词 1623字节
##################################################################
多命令顺序执行与管道符
多命令执行符 | 格式 | 作用 |
; | 命令1;命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令1&&命令2 | 逻辑与。当命令1正确执行,则命令2才会执行 |
|| | 命令1||命令2 | 逻辑或。当命令1执行不正确,则命令2才会执行 |
[root@localhost ~]# dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输入文件 指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数 指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数 指定输入/输出多少个数据块
例子:
[root@localhost ~]# date; dd if=/dev/zero of=/root/testfile bs=1k count=100000;date
[root@localhost ~]# grep [选项] "搜索内容" 文件名
选项:
-i: 忽略大小写
-n: 输出行号
-v: 反向查找
--color=auto 搜索出的关键字用颜色显示