shell脚本基础

一、shell脚本基础概念

 

1、什么是shell

       shell英文翻译过来是外壳的意思,作为计算机语言来理解可以认为它是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的shell命令就包括ls、cd、pwd等等。

       shell是站在内核的基础上编写的一个应用程序,它连接了用户和Linux内核,从而让用户能够更加便捷、高效、安全的使用linux内核,这其实就是shell的本质。

2、什么是shell脚本

       shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件中,进行处理业务逻辑,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

3、shell脚本的意义

  • 自动化完成软件的安装部署,如安装部署LAMP架构服务
  • 自动化完成系统的管理,如批量添加用户
  • 自动化完成备份,如数据库定时备份
  • 自动化的分析处理,如网站访问量

二、创建一个简单的shell脚本

1、创建shell脚本的步骤

  1. 创建一个包含命令和控制结构的文件
  2. 修改这个文件的权限使它可以执行
  3. 使用 chmod +x aaa.sh赋予脚本可执行权限
  4. 检测语法错误
  5. 执行 ./aaa.sh

2、脚本的初步编写

  1. 脚本以#!/bin/bash开头
  2. 脚本需要有可执行的权限

如:创建一个shell脚本,输出“hey boy”

#!/bin/bash
echo "hey boy"

执行方式:

  1. 输入脚本的绝对路径或相对路径(此方法要赋予该脚本可执行权限),如./hey.sh 或/home/hey.sh
  2. sh或bash + 脚本名,可以直接执行

3、脚本错误调试

脚本错误类型:

  1. 命令错误:命令错误不会影响接下来的命令,之后的命令会继续执行。
  2. 语法错误:会导致后续的命令不执行。造成脚本中一部分命令已执行,一部分未执行。
  3. 逻辑错误:执行后的效果不是自己想要的。需要自己去排查

调试方法:

bash -n 脚本名称      //只检查语法错误,不真正执行脚本。定位的错误行可能不准确
bash -x 脚本名称      //显示每个命令的执行过程,方便发现逻辑错误

三、重定向与管道符

       由于Shell脚本“批量处理”的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取、过滤执行信息变得十分重要,所以我们需要重定向和管道。

1、交互式硬件设备

类型设备文件文件描述符默认情况对应文件句柄位置
标准输入/dev/stdin0从键盘获得输入/proc/self/fd/0
标准输出/dev/stdout1输出到屏幕/proc/self/fd/1
错误输出/dev/stderr2输出到屏幕/proc/self/fd/2
  • 标准输入:从该设备接收用户输入数据。
  • 标准输出:通过该设备想用户输出数据。
  • 标准错误:通过该设备报告执行出错信息。

2、重定向操作

重定向的意思就是,不通过标准输出到默认屏幕上,而是输出到你指定的位置。

输入重定向:

符号作用
命令 < 文件从指定的文件读取文件,而不是从键盘输入
命令 << 分界符从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2将文件1 作为命令的标准输入并将标准输出到文件2

输出重定向:

符号作用
命令 > 文件将标准输出结果保存到指定的文件中(覆盖原有内容)
命令 >> 文件将标准输出结果追加到指定的文件尾部
命令 2> 文件将错误输出信息保存到指定文件中(覆盖原有内容)
命令 2>> 文件将错误输出信息追加到指定文件尾部
命令 > 文件 2>&1混合输出,将标准输出与错误输出保存到文同一个文件中
命令 2> 文件 1>&2同上
命令 &> 文件同上
命令 >& 文件同上
  • &表示混合,&> 和 >& 都表示将标准输出和错误输出重定向到同一个文件。
  • 命令 > 文件 2>&1,表示把错误输出2重定向给前面的标准输出1 (前面的1被省略了),即将错误输出和标准输出保存到同一个文件中。

示例:

1) 将“114514”重定向输出到 1.txt 文件中,之后再用 1.txt 文件中的内容给用户week设置密码(如果出现鉴定令牌操作错误需要输入setenforce 0关闭selinux)

 2)将“aaa"重定向输出到 tt.txt 文件中,之后将“bbb" 输出到 tt.txt 文件中,覆盖原有的”aaa";最后将“ccc"追加到 tt.txt 文件中

 3)使用分界符进行输入重定向

4)将错误输出重定向到log文件中

3、管道符

管道符的作用是连接两个命令,将第一个命令的标准输出作为第二个命令的标准输入。 同一行命令中可以使用多个管道符。linux下的管道符使用"|"表示。

格式:命令A | 命令B

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值