Linux学习(7)——Shell基础

目录

Shell概述

echo命令

第一个Shell脚本

别名与快捷键

历史命令

输出重定向

输入重定向

管道符

通配符


学习视频乃是慕课教程:https://www.imooc.com/video/4524

本节是学习所作笔记及总结。

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命令,即输出变量。

发布了500 篇原创文章 · 获赞 77 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/cnds123321/article/details/104982678