shell脚本(一)

一、概述

1、shell 概念及作用

   shell 是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把人类输入操作指令等的高级语言翻译成二进制传递给内核执行,并输出执行结果 。

   目前大多数 linux 默认使用的shell 是bash ,位置在 /bin/bash  。常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

2、shell 脚本概念及作用

   shell脚本本质上也是一种程序。将要执行的命令安装顺序保存到一个文本文件中,给该文件执行权限,可以结合各种shell 控制语句以完成重复性、批量性的复杂操作。脚本名以.sh 结尾,在vim书写时可以高亮显示。

二、shell 脚本的组成

   ①声明解释器:用来表示接下来用什么解释器来解释命令,例如:#!/bin/bash

   ②注释信息:以#开头的语句为注释信息

   ③执行命令:比如echo 命令用于输出 "  " 之间的字符串

三、执行脚本方式

1、直接调用shell 解释器bash 加上脚本名的方式执行,此方法不需要给与脚本执行权限

2、脚本路径 + 脚本名的方式执行,脚本的路径写绝对路径和相对路径都可以,此方法需要给与脚本执行权限

3、使用source 或 . +脚本名的方式执行,不需要执行权限,不建议使用,因为会改变当前环境,可能会产生一些问题

四、脚本执行逻辑

 1、顺序执行:程序按照从上到下的顺序执行

 2、选择执行:程序执行的过程中,根据条件的不同,进行选择不同分支继续执行

 3、循环执行:程序执行过程中重复执行多次某段语句

五、脚本错误调试

 1、书写脚本常见错误

  ①命令错误:命令出错不会影响接下来的命令执行,但本条命令不执行

  ②语法错误:直接影响脚本无法正常运行,可以用bash -n 检查

  ③逻辑错误:只能自己去筛查,可以用bash -x 检查

  2、安全选项

① 在脚本中写入set -e:一旦出错立即停止,不再往下执行

 ②在脚本中写入set -u:变量不存在不执行

六、重定向与管道符

 1、重定向

   重定向指改变电脑数据的输出方向,不输出到默认设备上,输出到你指定的位置,默认的输出方向是屏幕。例如我们发了一条指令给电脑操作,电脑的回复是在屏幕上,我们称之为标准输出;电脑没有正确回复,我们称之为错误输出;通过键盘、鼠标、扫描仪、话筒等输入设备给电脑传输信息和指令,我们称之为标准输入。

使用重定向输入输出:
类型操作符用途
重定向输入   <从指定的文件读取数据,而不是从键盘输入
重定向输出   >使用tty查看另一台终端设备名,可以输出到别的终端设备上
   >将输出结果覆盖原有内容保存到指定文件中
   >>将输出结果追加到指定的文件尾部
标准错误输出   2>将错误信息保存到指定的文件(覆盖原有内容)
   2>>标准错误输出结果追加到指定的文件尾部
混合输出   &>将标准输出、标准错误的内容保存到同一个文件中(无论对错都可以重定向覆盖)
   &>>将标准输出、标准错误的内容保存到同一个文件中(无论对错都可以重定向追加)

 2、管道符

  将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以叠加使用,例如:ls |wc -l。

七、shell变量

 1、shell变量概述

  变量是可以变化的值,用来存放系统和用户需要使用的特定参数(值)。变量由变量名个变量值组成,变量名使用固定名称,由系统预设或者用户自定义;变量值根据用户设置、系统环境的改变而改变。

 2、变量使用方法

   ①设置变量:变量名=变量值,例:a=10

   ②调用变量:echo  $变量名,例:echo $a;echo $a$b 表示一次调用多个变量

   ③删除变量:unset 变量名,例:unset a

   ④重新定义变量:变量名=变量值,例:a=20

   ⑤追加变量值:变量名+=变量值,例:a+=11   

 3、变量的类型

   ①自定义变量:由用户自定义修改和使用

   ②预定义变量:bash中内置的变量,不能修改,由shell (bash)维护,例如;$?、$$、$@

   ③环境变量:由系统维护,记录系统相关信息,env可以看到所有的环境变量

   ④只读变量:只可以读,不可以改,相当于常量,用的比较少

   ⑤位置变量:也称位置参数,使用$1、$2、$3......$9来表示

 4、特殊符号

    s{ }  :定义的变量名的范围,建议多使用,可以见面错误

    "  " : 弱引用,变量在双引号中可以识别

    '   ': 强引用,变量在单引号中不被识别

    `   `:反撇号,代表引用命令执行的结果

 5、变量的作用范围

    默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。

   可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用。

 6、预定义变量

   $?:表示前一条命令执行结果是否正确,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常

   $0:表示当前执行的脚本或程序的名称 当前脚本的名字

   $$:当前bash的进程id

   $#:表示命令行中位置参数的总个数

   $!: 后台任务最后一个id

   $*:表示所有位置参数的内容看成一个整体返回 返回所有

   $@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值