更新Shell是Linux基础里面相对最重要的一部分,所以单独拎出来做一篇总结

image.png

一、概述

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。
因此Bash: Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

3、Linux支持的Shell

  1. /etc/shells
    1. image.png
    2. 支持的Shell类型有

image.png

二、Shell脚本的执行方式

1、echo输出命令(欸Q)

[root@localhost ~]# echo [选项] [输出内容]
选项 -e: 支持反斜线控制的字符转换

  1. [root@localhost ]# echo -e "a\tb\tc\nd\te\tf"
  2. a b c
  3. d e f
  4. [root@localhost ]# echo -e "\x61\ t\x62\t\x63\n\x64\t\x65\t\x66"
  5. a b c
  6. d e f

image.png

  1. [root@localhost ~]# echo -e "\e[1;31m abcd \e[0m"
  2. #输出颜色
  3. #30m=,黑色,31m=红色,32m=绿色,33m=黄色
  4. #34m=蓝色,35m=洋红,36m=青色,37m=白色

image.png

2、第一个脚本

  1. [root@localhost sh]# vi hello.sh
  2. #!/bin/Bash #注意,此处的"#"并不是注释,而是标识符,类似于html中的<div>
  3. #The first program #后面这俩就是注释了
  4. # Author: shenchao ( E-mail: shenchao@lampbrother.net)
  5. echo -e "Mr. Shen Chao is the most honest man in LampBrother"
  6. #沈超老师是兄弟连中最正直的男人

3、脚本执行

  • 赋予执行权限,直接运行

    1. $ chmod 755 hello.sh #赋予执行权限
    2. $ ./hello.sh #直接运行(此处为相对路径)
    3. $ root/ sh/hel lo. sh #(此处为绝对路径)
    4. #或者
    5. $ bash hello.sh #Bash调用执行,只要语法正确甚至不用给执行权限
  • 通过Bash调用执行脚本bash hello.sh

  • dos2unix

拓展Windows使用的是dos命令,到Linux中执行其中转过来的文件是行不通的:例如Linux中用cat -A file查看某个文件的详细内容时,会看到换行符是$ 符号,但是转过来的Windows文件中的换行符却是 ^M$符号,此时Linux无法识别就会报错
因此解决办法就是安装转换格式的软件:dos2unix #其含义就是将dos命令转换(to)成unix系统可识别的命令的软件程序

  1. Lroot@localhost sh]# yum -y install dos2unix
  2. Loaded plugins: fas testmirror, security
  3. Loading mirror speeds from cached hostfile
  4. Setting up Install Process
  5. Package dos2unix-3. 1-37. el6.1686 already installed and latest vers ion
  6. Nothing to do

三、Bash的基本功能

1.历史命令与命令补全

  1. 历史命令

[root@localhost ~]# history [选项] [历史命令保存文件]
选项-C: 清空历史命令
-W: 把缓存中的历史命令写入历史命令保存文件~/.bash_ history不用等到关机才保存

  • 历史命令默认会保存1000条,可以在环境变量配置文件/etc/profile中进行修改
  1. 历史命令的调用
    1. 使用上、下箭头调用以前的历史命令
    2. 使用“!n”重复执行第n条历史命令
    3. 使用“!!” 重复执行上一条命令
    4. 使用“!字串”重复执行最后一条以该字串开头的命令
  2. 命令与文件/目录补全
  • 在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按“Tab”键就会自动进行补全

    2.命令别名与常用快捷键

  1. 命令别名

    1. [root@localhost ~]# alias 别名='原命令'
    2. #设定命令别名
    3. [root@localhost ~]# alias
    4. #查询命令别名

    例如alias vi='vim'再用alias查询一下所有系统中的别名

    1. [root@localhost] # alias
    2. alias cp= 'cp -i'
    3. alias l.= 'ls -d .* --color-auto '
    4. alias ll=' ls -1 --color= auto'
    5. alias ls=' ls -- color- auto '
    6. alias mv= 'mv i'
    7. alias rm='rm -i'
    8. alias vi='vim'
    9. alias which= 'alias | /usr/bin/which --tty-only -read i alias - show dot - show ti lde'
  2. 命令执行时顺序

    1. 第一顺位执行用绝对路径或相对路径执行的命令
    2. 第二顺位执行别名。
    3. 第三顺位执行Bash的内部命令。
    4. 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一- 个命令。
  3. 让别名永久生效

[root@localhost ~ ]# vi /root/ .bashrc

  1. Bash常用快捷键

注意标蓝🎫部分应该熟练经常实用
image.png

3.输入输出重定向

  1. 标准输入输出

image.png

  1. 输出重定向

image.png
例如标准重定向 和 追加重定向输出结果的不同

  1. Lroot@localhost # ls
  2. anaconda-ks. cfg install. log install. log- sys log
  3. [ rootel ocalhost ]# ls > abc
  4. [ root@l ocalhost # ls
  5. abc
  6. anaconda ks. cfg install. log
  7. install. log- syslog
  8. [ root@l ocalhost ]# cat abc
  9. abc
  10. anaconda- ks. cfg
  11. install. log
  12. install. log. sys log
  13. [ root@localhost # date
  14. 20140114 星期二21:48:55 CST
  15. [ root@loca lhost # date > abc #已经覆盖前ls > abc输入的文件内容,故只显示最新输入内容
  16. [ root@l ocalhost ]# cat abc
  17. 2014 01 14日星期二21:49:08 CST
  18. [ root@ 1 ocalhost ] # date >> abc #附加重定向可以在文档内部追加内容而不覆盖已有内容
  19. [ root@l ocalhost ]# cat abc
  20. 20140114日星期二21:49:08 CST
  21. 201401 14日星期三21:49:33 CST

4.多命令顺序执行与管道符

5.通配符与其他特殊符号