【linux】shell基础知识

一、shell简介

1. 什么是shell?
- shell就是一个解释器,当用户向linux内核发送命令的时候,先发送到shell,shell将命令转化成linux内核能识别的指令,然后发送给linux内核。
- 用户可以用Shell来启动、挂起、停止或者编写一些程序
- Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。
- Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

二、shell基础

1. 查看支持的shell
```
    cat /etc/shells
```
- shell有很多种,我们可以通过cat /etc/shells来查看有哪些shell
    - 一般我们使用/bin/bash这个shell
2.查看shell的帮助信息
命令作用
man bash查看bash的命令帮助
info bash查看bash的文档
help命令显示bash支持的命令
help cd如果想看某个命令的帮助可以 help 命令
3. echo
- 输出命令
- -e支持转义字符
    ```
        echo hello //输出hello
        echo hello\r\n //输出hellorn
        echo "hello\r\n" //输出hello\r\n
        echo -e "hello\r\nworld"
        //输出:
        hello
        world

       
    ```
控制字符作用
\n换行符
\r回车键
\t制表符,也就是Tab键
\v垂直制表符
\onnn按照八进制ASCII码表输出字符,其中0为数字零,nnn是三位八进制数
\xhh按照十六进制ASCII码表输出字符,其中hh是两位十六进制数
符号颜色
#30m黑色
#31红色
#32绿色
#33黄色
#34蓝色
#35洋红
#36青涩
#37白色
    echo -e "12\r\n34\t56\v78"
    //以上输出:
    12
    34  56
            78

    echo -e "\0141"
    //以上输出a,就是将8进制转换成十进制数,然后对照ASCII表输出字符

    echo -e "\x61"
    //以上输出a,就是将十六进制转成十进制,然后对照ASCII表输出字符

    echo -e "\e[1;31m warning \e[0m"
    //输出红色的warning,颜色需要对照上面的表格
- 特别注意:输出带颜色的内容,格式是:
    ```
        echo -e "\e[1;颜色符号 内容 \e[0m"
    ```
    - 颜色符号对照上表,内容左右没有空格
4. 编写执行shell
4.1 编写shell脚本
- 一般编写shell脚本,在脚本最上面会声明#!/bin/bash,代表是shell脚本执行,并且是/bin/bash下的shell
- 编写shell文件举例如下:
    ```
        #!/bin/bash
        echo -e "\e[1;34m hello world \e[0m"
    ```
- 编写好的shell脚本文件必须以.sh作为文件后缀
4.2 执行shell脚本
- 执行有两种方式:
    - 方式一:bash 文件
    - 方式二:./文件
        - 注意:方式二执行文件前,必须先让文件有权限,即:
        ```
            chmod u+x ./文件
            //其中chmod表示change mode

            //也可以使用
            chmod 755 文件
        ```
    - 举例执行shell文件
        ```
            bash ./test.sh
            //或
            chmod 755 ./test.sh
            ./test.sh
        ```
5. 别名
- 查看所有别名
    ```
        alias
    ```
- 查看指定别名
    ```
        alias ls
    ```
- 设置临时别名
    ```
        alias yuhua="cd /home/yuhua"
    ```
        - 这样执行yuhua这个命令就相当于执行"cd /home/yuhua",不过这是临时的,重启机子后就没有了
- 设置永久别名(2步走,第一步写入,第二部使生效)
    - 需要写入环境变量配置文件,即~/.bashrc文件
    ```
        su //进入root用户
        vi ~./bashrc
        //可以在里面添加别名
        alias yuhua="su yuhua"
    ```
    - 然后使修改后的文件生效,有两个命令均可使用
        - 方法一:使用source
        ```
            source ~/.bashrc
        ```
        - 方法二:使用点.
        ```
            . ~/.bashrc
        ```
- 删除临时别名
    ```
        unalias yuhua
    ```
- 永久删除别名
    ```
        进入 ~/.bashrc
        然后删除别名
        然后source ~/.bashrc
    ```
- 当永久别名跟临时别名是同一个时,临时别名优先
    - 举例:
        - 设置了永久别名alias yuhua="echo 1"
        - 也设置了临时别名alias yuhua="echo 2"
        - 当执行yuhua,会打印出2
6. 命令的生效顺序
- 找:绝对路径或者相对路径,找不到走下一步
- 找:别名,找不到走下一步
- 找:bash内部命令,找不到走下一步
- 找:按照$PATH环境变量定义的目录查找顺序找到的第一个命令
    - 注意:查看环境变量定义的目录,使用命令
        ```
            echo $PATH
            //会得到的结果是:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/yuhua/bin
            //该结果代表环境变量定义的目录,有很多,以:分割
        ```
7. 命令快捷键
命令含义
ctrl+c强制终止当前命令
ctrl+l清屏
ctrl+a光标移动到命令行首
ctrl+e光标移动到命令行尾
ctrl+u从光标所在的位置删除到行首
ctrl+z把命令放入后台
fg把任务带回前台
ctrl+r在历史命令中搜索
- 注意:在这里,所谓的把任务放入后台与带回前台指的是:
    - 当我输入命令,输完,并不是马上就执行结束的,可能是等待的过程,也就是当前命令一直在进行中,那么这时候可以使用ctrl+z把命令带入后台执行,这样你就可以继续操作了;同样的,对弈在后台执行的命令,可以用fg把任务待会前台,这样你就不能继续操作了
8. 历史命令
- history [选项] [历史命令保存文件]
    - 选项
        - -c 清空历史命令
        - -w 把缓存中的历史命令写入历史命令保文件 ~/.bash_history
- 默认保存1000条 /etc/profile HISSIZE=10000
9. 调用
- 使用上下箭头调用以前的历史命令
- 使用 !n 重复执行第n条历史命令
- 使用 !! 重复执行上一条命令
- 使用 !字符 重复执行最后一条以该字符串开头的命令
    ```
        history -c
        1  echo 1
        2  echo 2
        3  echo 3
        !2
        !!
        !echo
    ```
10. 输出重定向
10.1 标准输入输出
设备设备文件名文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出
类型符号作用
标准输出重定向命令 > 文件以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
标准输出重定向命令 >> 文件以追加的方式,把命令的正确输出输出到指定的文件或设备当中
错误输出重定向命令>文件以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中
错误输出重定向命令>>文件以追加的方式,把命令的错误输出输出到指定的文件或设备当中
正确输出和错误输出同时保存命令>文件 2>&1以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存命令>文件 2>>&1以追加的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存命令&>文件以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存命令&>>文件以追加的方式,把正确输出和错误输出都保存到同一个文件当中
正确输出和错误输出同时保存命令>>文件1 2>文件2以覆盖的方式,正确的输出追加到文件1中,把错误输出追加到文件2中
10.2 输入重定向
- wc命令的功能为统计指定文件中的行数、单词数、字节数(换行回车表示一个字节), 并将统计结果显示输出
- 命令 < 文件把文件做为命令的输入
- 命令 << 标识符 标识符把标识符之间内容作为命令的输入
- wc < access.log 
[root@localhost ~]# wc <<!
> hello world
> !
1  2 12

//这里的wc << ! 这个!是一个定界符,也就是当你输入的时候,输入当!表示结束了
//特别注意:这里的!是任意取的,你可以写@,也可以写EOF,甚至可以写yuhua
11. 管道符号
11.1 多命令顺序执行
多命令执行符格式作用案例
;命令1;命令2多个命令执行,命令之间没有任何逻辑联系echo 1;echo 2;
&&命令1&&命令2逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行echo 1&&echo 2;
\\命令1\\ 命令2逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行echo 1\\echo 2;
   - date;ls;date;ls
   - ls && echo yes || echo no

11.2 管道符
- 命令1的正确输出会作为命令2的操作对象
- 命令1|命令2
```
    ls /etc/ | more
    netstat -an | grep ESTABLISHED | wc -l
```
11.3 通配符
- 匹配文件名和目录
通配符作用
?匹配一个任意字符
*匹配0个或任意字符,也就是可以匹配任意内容
[]匹配中括号中任意一个字符
[-]匹配中括号中任意一个字符,-代表范围
[^]匹配不是中括号中的一个字符
11.4
符号作用
‘’单引号。在单引号中所有的特殊符号,如$和`都没有特殊含义
“”双引号,在双引号里特殊符号都没有特殊含义,但是 $ ` \ 例外,拥有调用变量值,引用命令和转义的含义
`反引号,扩起来的是系统命令
$()和反引号一样
#在shell脚本中,#开头的行代表注释
$用于调用变量的值
\转义符号
- 这里的单引号和双引号类似php
    - 单引号里如果有变量,不解析
    - 双引号里如果有变量,会解析
    - 举例:
        ```
            name=yuhua
            myname='$name_10'
            echo myname //得到的是$name_10字符串
            myname2="$name-10"
            echo myname2 //得到的是yuhua-10
        ```
- 这里的反引号代表执行的意思($()与反引号效果一模一样)
    - 举例:
        ```
            files="`ls`"
            echo $files //会先得到ls,发现ls是带反引号的,则执行这个ls,得到的就是执行命令ls的结果
        ```
    -  a=`ls`
    -  b=$(ls)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值