关于脚本

编写脚本中出现的三种错误

1.语法错误bash-n 检查语法错误只是检查并不执行 语法错误之后命令不会再执行

Cat - A查看有无特殊符号语法错误

Cat -n列行

  1. 逻辑错误 后续命令仍会执行

bash-x 逐行执行 每一行命令都会显示出来

Cat test .txt在脚本中加测试代码每隔一段输出出来一次

  1. 命令错误 仍然会执行后续命令

也是用bash-x命令

 

关于变量:

变量类型大致分为:环境变量 内置变量 只读变量 位置变量 退出状态码变量 以及自定义变量

1)环境变量:环境变量:

可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

一般只在系统配置文件中使用,在脚本中较少使用

变量声明及赋值:#声明并赋值

export name=VALUE

declare -x name=VALUE

变量引用:$name  ${name

注意 :变量的值加不加单引号双引号并无区别 但是等号前后不能带空格 TITLE=cto

显示出变量的值 echo $TITLE  echo后面必须加$否则 echo认为后面的是字符串进行输出

变量value的值可以是多种结果

我们可以把一个变量的值赋给另一个 NAME=$TITLE

脚本中的变量只在脚本中使用

子进程的变量在父进程或者其他地方是看不到的

Echo 两个变量的时候 中间不能添加下划线否则 echo认为是一个整体只会输出一个变量

Env显示环境变量

$?的值是由最后一条决定的 中间错误不会影响显示

2)只读变量:只读变量:只能声明定义,但后续不能修改和删除,即常量

3)声明只读变量:  

readonly name

declare  -r name

查看只读变量:readonly [-p]

declare -r

4)位置变量 位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数

5)退出状态码变量:当我们浏览网页时,有时会看到下图所显示的数字,表示网页的错误信息,我们称为状态码,在shell脚本中也有相似的技术表示程序执行的相应状态。

关于脚本安全;set 命令实现脚本安全

-u 在扩展一个没有设置的变量时,显示错误信息, 等同set -o nounset

-e 如果一个命令返回一个非0退出状态值(失败)就退出, 等同set -o errexit

-o option 显示,打开或者关闭选项

显示选项:set -o

打开选项:set -o 选项

关闭选项:set +o 选项

-x 当执行命令时,打印命令及其参数,类似 bash -x

 

逻辑运算:

与:与:&:和0相与,结果为0,和1相与,结果保留原值

或:|:和1相或结果为1,和0相或,结果保留原值

非:! ! 1 = 0 ! true  ! 0 = 1 ! false

异或:异或的两个值,相同为假,不同为真。两个数字X,Y异或得到结果Z,Z再和任意两者之一X异或,将得出 另一个值Y

短路运算

短路与

CMD1 短路与 CMD2

第一个CMD1结果为 0 (假 ),总的结果必定为0,因此不需要执行CMD2

第一个CMD1结果为 1 (真),第二个CMD2必须要参与运算,才能得到最终的结果

短路或

CMD1 短路或 CMD2

第一个CMD1结果为1 (真),总的结果必定为1,因此不需要执行CMD2

第一个CMD1结果为0 (假 ),第二个CMD2 必须要参与运算,,才能得到最终的结果

短路与跟短路或同时使用的时候必须短路与写在前面 否则会出现错误 会打印两条命令

 

花括号跟小括号在组合测试短路与短路或这里使用区别不大 但是要注意{}里面前后都要加空格 以及后面需要加;

 

条件测试命令

test EXPRESSION

[ EXPRESSION ]

[[ EXPRESSION ]]

注意:EXPRESSION前后必须有空白字符

条件测试比数字大小

【】内变量前必须加$ 而且两个变量必须都是数字

【】两个变量相比等号前面必须有空格

建议变量加上双引号引起来

 

关于()  {}

( list ) 会开启子shell,并且list中变量赋值及内部命令执行后,将不再影响后续的环境, 帮助看:man bash 搜索(list)

{ list; } 不会启子shell, 在当前shell中运行,会影响当前shell环境, 帮助参看:man bash 搜索{ list; }

组合测试:组合测试条件

2.13.1 第一种方式

说明: -a 和 -o 需要使用测试命令进行,[[ ]] 不支持

范例:

2.13.2 第二种方式

[ EXPRESSION1 -a EXPRESSION2 ] 并且

[ EXPRESSION1 -o EXPRESSION2 ] 或者

[ ! EXPRESSION ] 取反

 

条件选择:条件选择

4.1.1 选择执行if语句

格式: 单分支 双分支 多分支

.   ~/.bashrc

if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else

COMMANDS; ] fi

多个条件时,逐个条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句

if 语句可嵌套

条件判断case语句

格式:

case支持glob风格的通配符:

范例:

case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac

posted @ 2020-04-05 20:37  肖豪  阅读(257)  评论(0编辑  收藏  举报