本节是学习所作笔记及总结。
Shell概述
1、Shell是什么
接收输入的命令,将命令翻译成二进制,调用操作。
-
Shell是一个命令行解释器,它为用户提供一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
-
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
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。
3、使用echo $SHELL查看用的是什么Shell。
例1:echo $SHELL命令,查看用的是什么Shell。
本机用的正式bash。
4、使用vi /etc/shells命令查看支持哪些Shell。
例1:vi /etc/shells命令,查看支持的Shell。
echo命令
语法:
echo [选项] [输出内容]
选项:
-e 支持反斜线控制的字符转换
控制字符 | 作用 |
---|---|
\a | 输出警告音 |
\b | 退格键,就是向左删除键 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,也就是Tab键 |
\v | 垂直制表符 |
\Onnn | 按照八进制ASCII码表输出字符。其中0为数字零,nnn是三位八进制数 |
\xhh | 按照十六进制ASCII码表输出字符。其中hh是两位十六进制数。 |
例1:echo "Hello Linux"命令,输出“Hello Linux"。
例2:echo -e "a\nb\nc"命令,换行输出。
例3:echo -e "\e[1;31m世界那么大,我想去看看。\e[0m"命令,显示颜色。
第一个Shell脚本
按Ctrl+X离开。
所有命令如下:
其中#代表的是注释,"#!/bin/bash"必须写上。"nano hello.sh"命令是创建hello.sh文件并编辑内容。
脚本执行:
-
赋予执行权限,直接运行
-
chmod 755 hello.sh
-
./hello.sh
-
-
通过Bash调用执行脚本
-
bash hello.sh
-
别名与快捷键
可以设置别名来调用很长的命令,而不至于每次都输入长命令。
可以通过alias命令来设置别名。
语法:
alias
查看系统中所有的命令别名
alias 别名='原命令'
设定命令别名
vi ~/.bashrc
写入环境变量配置文件,设置别名永久生效。让配置别名不用重启就直接生效,使用[source .bashrc]命令
unalias 别名
删除别名
由于执行的别名可能和系统已有的命令相同,如rm,那么它们的执行是有先后顺序的。
命令生效顺序:
-
第一顺位执行用绝对路径或相对路径执行的命令。
-
第二顺位执行别名。
-
第三顺位执行Bash的内部命令
-
第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
例1:alias命令,查看系统中所有已存在的别名。
例2:alias lh='ls -lh'命令,将"ls -lh"命令创建一个名为"lh"的别名,用来人性化显示文件详细信息。
但这个设置的别名是临时的,即重启后别名又会消失。
例3:vi ~/.bashrc命令和source /root/.bashrc命令,设置永久别名。
”source /root/.bashrc"命令可以使上面的设置立即生效,不用重启就能永久配置别名。
测试la命令
例4:unalias lh命令,删除名为lh的别名。
常用快捷键:
- Ctrl+C 强制终止当前命令
- Ctrl+L 清屏
- Ctrl+A 光标移动到命令行首
- Ctrl+E 光标移动到命令行尾
- Ctrl+U 从光标所在位置删除到行首
- Ctrl+X 把命令放入后台
- Ctrl+R 在历史命令中搜索
历史命令
语法:
history [选项] [历史命令保存文件]
选项:
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history
例1:history命令,查看当前历史命令。
例2:history -c命令,清空历史命令。
例3:cat ~/.bash_history命令,查看历史命令保存文件。
历史命令的调用:
-
使用上、下箭头调用以前的历史命令
-
使用"!n"重复执行第n条命令
-
使用“!!"重复执行上一条命令
-
使用"!字符串"重复执行最后一条以该字符串开头的命令
历史命令的补全:
- 使用Tab键可以加快输入速度,便于命令排错。
- 在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按”Tab“键就会自动进行补全。
输出重定向
例1:ls > test.log命令,将ls命令的结果内容保存到test.log文件中,但是是覆盖原内容。
例2:ls >> test.log命令,将test.log文件中追加ls命令的结果内容。
例3:lss 2> test.log命令,lss是一个错误的命令,将产生的结果内容覆盖保存到test.log文件中。
例4:abc 2>> test.log命令,abc也是一个错误的命令,不过是将错误追加到test.log文件中,而不是覆盖。
如果是正确的命令,“2>>"则不会将输出保存到文件中。
例5:ls > test.log 2>&1命令和lss > test.log 2>&1命令,其中前者是正确命令,后者是错误命令,都会将结果内容以覆盖的方式保存到test.log文件中
例6:ls >> test.log 2>&1和lss >> test.log 2&1命令,其中前者是正确命令,后者是错误命令,都会将结果内容以追加的方式保存到test.log文件中
例7:ls &> test.log命令和lss &> test.log命令,以覆盖的方式将正确结果和错误结果都保存到test.log文件中。
例8:ls &>> test.log命令和lss &>> test.log命令,以追加的方式将正确结果和错误结果都保存到test.log文件中。
例9:ls >> success.log 2>> error.log命令和lss >> success.log 2>> error.og命令,前者是正确命令,后者是错误命令,即将产生的正确结果保存到success.log文件中,将错误结果保存到error.log文件中。
例10:ls &> /dev/null命令,将产生的结果无论正确还是错误都扔掉。
输入重定向
统计语法:
wc [选项][文件名]
通过Ctrl+D显示统计结果
选项:
-c 统计字节数
-w 统计单词数
-l 统计行数
例1:wc命令,统计输入内容的字节数,单词数,行数。
例2:wc -l命令,统计行数。
例3:wc error.log命令,统计文件中的字符数行数等。
管道符
可以使用管道符实现多命令顺序执行。
多命令顺序执行:
多命令顺序执行语法:
命令1 ; 命令2 ; 命令3
多个命令顺序执行,命令之间没有任何逻辑联系。
命令1 && 命令2
逻辑与。
当命令1正确执行,则命令2才会执行。
当命令1执行不正确,则命令2不会执行。
命令1 || 命令2
逻辑或。
当命令1执行不正确,则命令2才会执行。
当命令1正确执行,则命令2不会执行。
管道符语法:
命令1 | 命令2
命令1的正确输出作为命令2的操作对象,命令2必须能够操作命令1的输出
例1:ls ; lss ; cd /命令,几个命令顺序执行,无论命令是否正确都会执行完。
例2:ls && cd /命令和lss && ls命令,只有命令1正确执行,命令2才会正确执行,如果命令1错误,则命令2不会执行。
例3:ls || cd /命令和lss || ls命令,如果命令1正确执行,则命令2不会执行;如果命令1错误,那么命令2就会执行。
例4:ls && echo yes || echo no命令,如果ls命令正确则输出yes,不正确则输出no。
例5:netstat -an | grep ESTABLISHED命令,查看正在连接的用户。
通配符
例1:find install.log*命令,查询匹配install.log的文件。
例2:echo `date`命令和echo $(date)命令,都可以执行系统命令,但推荐后者$(),因为反引号容易被看成单引号。
例3:d=date命令和$d命令,即输出变量。