[Linux] shell脚本相关知识

一、shell脚本基础

1.1 shell脚本的作用

shell将人类使用的高级语言翻译成二进制,再将二进制翻译成高级语言。换句话就是人类写了一个命令集合,然后用bash去翻译给硬件执行。

linux中常见的shell:

        bash:基于gun的框架下发展的shell

        csh:类似c语言的shell

        tcsh:整合了csh提供了更多功能

        sh:已经被bash替换

        nologin:让用户无法登录

shell的用途:

1. 简化操作,提高工作效率

2.避免重复劳动导致的出错

3.实现标准化

1.2 shell脚本是什么以及构成

把命令集合在一起然后一一执行

组成:

1.声明解释器(#!/bin/bash)

2.注释信息

3.可执行命令

1.3 脚本执行

执行逻辑:

脚本执行逻辑

  1. 顺序执行:程序按从上到下顺序执行

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

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

执行方式:

1.指定路径执行(需要执行权限)

2.指定shell解释器执行(不需要权限)

1.4脚本错误如何解决

第一种:命令错误,不会影响接下来命令执行可用bash -n检查错误

第二种:语法错误,直接影响脚本,无法正常运行可用bash -x执行检查

第三种:逻辑错误,没有适合的的方法解决

补充:set -e 放在脚本前面,一旦出错立即停止执行

           set -u 变量不存在不让执行

二、重定向和管道符

2.1 重定向

重定向:改变电脑数据的输出方向,默认电脑数据的输出方向是屏幕

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
错误输出/dev/stderr2显示器

标准输出:你发了一条指令给电脑,电脑回复给你,结果一定会显示在屏幕上

标准输入:我们通过键盘、鼠标等设备输入给电脑的指令

错误输出:电脑没有给出正确答复

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

 正确输出

错误输出 

 2.2 多行重定向

#####将内容写入文件
[root CXK /opt]#cat >test.txt <<error
> 123
> 345
> 567
> error

2.3 管道符

|

作用:将第一个命令的结果当作后一个命令的处理对象

三、变量

含义:变量源于数学,是计算机语言中的一个抽象概念,可以存储计算结果或表示一个值。 变量可以通过变量名访问。在命令式语言中,变量通常是可变的。

只能不能修改是常量   

3.1 变量类型

1.自定义变量:由用户自己定义修改和使用

2.预定义变量:bash中内置的一类变量,不能修改规定

3.环境变量:env看到所有环境标量

4.只读变量只可以读取不能修改的变量,相当于常量,用处较少

5.位置变量:通过命令行给脚本传递参数

4.只读变量:只可以读取不可以更改 
5.位置变量:通过命令行给脚本传递参数

系统内置变量:PATH,UID,HOSTNAME,USER

3.2 命名要求

1. 区分大小写

2. 不能使用内置变量

3. 只能使用数字字母下划线,不能以数字开头,不支持“-”

4. 大驼峰 StudentFirstName

5. 小驼峰 studentFirstName

 

 

1.赋值时使用双引号(" ")可以直接调用变量

2.赋值时使用单引号(' ')变量$只会被认为是字符$ 不会调用变量

3.赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果 和$( ) 用法相同

4.{}可以分隔变量值

单引号不识别 变量

双引号可以识别变量

{} 可以确定变量的范围

`` $() 调用命令执行的结果

  变量追加值

格式:

title=cto

title+=ylc

变量名+=追加名

修改变量环境
[root CXK /opt] PATH+=:/opt

3.3 从键盘输入的内容变成变量(read -p)

3.4 变量作用范围

 默认情况下,新定义的变量被称为局部变量,因为它们只在当前 shell 环境中有效。一旦进入子程序或新的 shell 环境,局部变量就不再起作用了。

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

解决办法:格式1:export 变量名

                  格式2:export 变量名=变量值

定义全局变量 

 3.5 整数运算

expr只能进行整数的运算

格式: expr 变量1 运算符 变量2 [运算符 变量3]

运算符:

加法 +

减法 -

乘法 \ *

除法 /

取余 (取模)%

(1) let var=算术表达式
let sum=2*3

(2) $((var=算术表达式)) 和上面等价
((sum=1+9))
echo $sum

(3) var= $[算术表达式]

(4) var=$(expr arg1 arg2 arg3 ...)

(5) var= `expr arg1 arg2 arg3 ...`

(6) echo '算术表达式' | bc

 3.6 环境变量

env可以看到所有变量

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

$PWD 表示当前所在工作目录

$PATH 表示可执行用户程序的默认路径

环境变量的全局配置文件:/etc/profile

只用于单个用户:~/.bash_profile

vim /etc/profile
source /etc/profile
//使用source立即生效

3.7 位置变量

 位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

vim 1.sh
bash 1.sh

echo "$0"代表本身 

 

 3.8 预定义变量

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

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

        $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常

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

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

        $$:当前bash的进程id

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

vim 1.sh

vim 2.sh

vim 3.sh

 总结:

Shell 脚本描述规范:

(1) 脚本声明:#!/bin/bash。

(2) 注释信息:第一行以 # 号开头,定义了注释信息;注释行的内容不执行;

(3) 执行语句:描述要执行的脚本代码;

执行 Shell 脚本:

(1) 使用绝对路径/相对路径指定要执行的脚本文件。 脚本在子外壳环境中执行;

(2) 使用 bash/sh 程序指定要执行的脚本文件。 这不需要执行权限,脚本会在子壳环境中执行; (3) source/。 指定要运行的脚本文件,脚本将在当前 shell 环境中执行(影响当前目录、变量值等);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值