shell脚本编程规范和变量

目录

1.shell脚本介绍

1.1什么是shell脚本

1.2 shell脚本的构成

1.3 shell脚本执行方法

2.重定向

3.shell变量

3.1 变量作用

3.2 定义变量的方法

3.3 变量的类型

3.3.1 环境变量

3.3.2 只读变量

3.3.3 位置变量

3.3.4 预定义变量

3.4 引号的使用

1.shell脚本介绍

1.1什么是shell脚本

shell是linux和用户之间的桥梁,但虽然不是系统内核的一部分,但它调用了系统的大部分功能来执行程序、奖励文件和各个程序的运行。

shell有两种执行命令的方式

  • 交互式:我们最常使用的模式,在命令终端输入一条命令,shell就去执行解释一条命令。
  • 批处理:也就是shell脚本,把许多条命令集中在一个文件中,让shell一次性执行解释,不必一条一条的敲命令,他是一种弱类型语言,不需要事先定义数据类型。

1.2 shell脚本的构成

1.声明解释器

#!/bin/bash               默认的shell环境,可以根据不同的需求选择不同的环境

Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种Shell。我们常说有多少种Shell,其实说的是Shell脚本解释器

2.注释信息

以#开始

注释信息一般包含

  • 语句含义   
  • 作者信息   
  • 脚本完成日期等

3.可执行语句

也就是shell脚本中生效的语句

1.3 shell脚本执行方法

首先shell脚本作为一个命令集合文件,想要运行就必须要有执行权限,所有我们在执行脚本之前,一般会让文件获得执行权限,再让他执行,这也是一种执行脚本的方法。

方法一

chmod +x text.sh        赋予权限
./text.sh               执行脚本

注意,一定要写成 ./text.sh,而不是 text.sh,运行其它二进制的程序也一样,直接写 text.sh,linux 系统会去 PATH 里寻找有没有叫 text.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 text.sh 是会找不到命令的,要用 ./text.sh 告诉系统说,就在当前目录找。

如果我们不想赋予文件执行的权限,又想使用它,我们可以使用下面的方法来执行

方法二

bash ./text.sh

这个方法不用加权限就可以直接运行,他是指定shell的一种来执行脚本。

方法三

source ./text.sh

这个方法同样不需要执行权限就是可以执行,但这里并不建议使用这种方法,前面几种方法在运行脚本时会新开bash环境然后在其中运行,运行完毕之后退回到原来的环境,而这种方法会直接在当前的环境中执行脚本,可能会影响到当前的环境所以不建议使用。

方法四

把脚本文件放入环境变量的路径中

我们可以创建脚本的软链接文件指向其中的一个环境变量路径中

或者把当前路径加入到环境变量中

export PATH=$PAHT:路径

然后直接输入脚本名称就可以执行了

 

2.重定向

在了解重定向之前我们需要知道,什么是file description。

file description也就是文件描述符,在linux中,文件描述符有三种

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

结果信息的重定向需要配合文件描述符使用

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

实例:

混合输出的另一种方法   首先将正确信息导入到1.txt文件中,再把错误信息导入到正确信息中

3.shell变量

3.1 变量作用

变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则。

3.2 定义变量的方法

变量名 = 变量值

要注意的是,shell脚本中,变量名的只能使用下划线和字符,字符区分大小写,并且不能和预留字段冲突

read -p  “提示内容”  变量名

一种交互方式的变量定义方法,需要用户手动输入变量值

3.3 变量的类型

3.3.1 环境变量

环境变量也称为全局变量,可以在创建他们的Shell及其派生出来的任意子进程Shell中使用,环境变量又可以分为自定义环境变量和bash内置的环境变量,环境变量可以在命令行中设置和创建,用户退出命令行时这些变量值就会丢失,想要永久保存环境变量,可在用户家目录下的. bash_profile或. bashrc(非用户登录模式特有,如:SSH)文件中,或在/etc/profile文件中定义,这样每次用户登录时这些变量都将被初始化

几种不同的环境变量文件

  • /etc/profile                    系统每次启动时执行,全局有效
  • /etc/bashrc                   针对所有用户的,用户每切换一个shell环境都会自动执行  
  • /root/.bash_profile        不同用户登录系统会自动执行
  • /root/.bashrc                 当前用户每切换一个shell环境都会自动执行 

3.3.2 只读变量

只读变量顾名思义,只可读不可修改

readonly  变量名 = 变量值

3.3.3 位置变量

在 Linux 的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数。其中,$0 代表命令行本身,$1 代表第 1 个参数,$2 代表第 2 个参数,依次类推。当参数个数超过 10 个时,就要用大括号把这个数字括起来,例如,${10} 代表第 10 个参数

例如

3.3.4 预定义变量

预定义变量即Shell已经定义的变量,用户可根据Shell的定义直接使用这些变量,无需自己定义。所有预定义的变量都由$符和其他符号组成,常用的预定义变量如下所示

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

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

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

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

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

  • $$:当前进程id

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

注意,$@和$*在不加引号时含义相同,表示位置参数的整体返回,加引号则含义不同

3.4 引号的使用

  • 双引号:允许通过$符号应用其他变量值
  • 单引号:禁止引用其他变量值,$视为普通符号
  • 反撇好(`):命令替换,提取命令执行后的输出结果

注意:$()和反撇作用相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值