shell编写规范和变量

目录

一、shell

1、shell的作用

2、Shell种类

 二、shell脚本

1、shell脚本的概念

2、shell脚本的构成

3、shell脚本执行

4、管道操作

 三、重定向

 四、变量

1、变量的分类

2、定义新的变量

3、 变量作用范围

4、环境变量

5、位置变量

6、自定义变量

变量的定义

用echo查看和引用变量的值

​编辑

取消定义

双引号(”)

单引号(‘)

反撇号(`) 不能嵌套

交互式定义变量(read)

export命令

7、预定义变量

五、变量运算

整数变量的运算

常用的几种运算符

常用的运算表达式

bc(小数运算)

布尔值:真(true)或 假(false) 成立或不成立


一、shell

1、shell的作用

       Linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

2、Shell种类

如何查看Linux系统中的Shell种类呢?

[root@jn ~]# cat /etc/shells
/bin/sh        #是bash命令的软链接  (已经被/bin/bash所替换)
/bin/bash      #基准于GNU的框架下发展出的Shell
/usr/bin/sh    #已经被bash所替换
/usr/bin/bash  #centos和redhat系统默认使用bash shell
/bin/tcsh      #csh的增强版,与csh完全兼容 整合了csh,提供更多的功能
/bin/csh       #已经被/bin/bash 所替换  (整合C shell,提供更多的功能)
PS:nologin:奇怪的shell,这个shell可以让用户无法登录主机。
bash ( /bin/bash)是目前大多数Linux版本采用的默认Shell。

 

 二、shell脚本

1、shell脚本的概念

       shell脚本就是说我们把原来 linux 命令或语句放在一个文件中,然后通过这个程序文件去执行时,我们就说这个程序为 shell 脚本或 shell 程序;我们可以在脚本中输入一系统的命令以及相关的语法语句组合,比如变量,流程控制语句等,把他们有机结合起来就形成了一个功能强大的 shell 脚本。

总结:将需要执行的命令保存到一个文件中,按照顺序执行,它不需要编译,它是解释型的

2、shell脚本的构成

  1. 脚本申明(解释器):若第一行为“#!/bin/bash”,脚本申明(默认解释器):表示此行以下的代码语句是通过/bin/bash程序来执行。还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect
  2. 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在脚本运行时不会被执行
  3. 可执行语句:如echo命令,用于输出“ ”之间的字符串

3、shell脚本执行

shell 脚本的执行通常有以下几种方式:
方法一:当前路径(绝对路径与相对路径)下执行脚本(要有执行权限)
指定绝对路径:/home/first.sh
指定相对路径:./first.sh

方法二:sh 、bash脚本文件路径(这种方式可以不对脚本文件添加执行权限)
bash脚本路径:bash first.sh  (以子进程的方式运行脚本)
sh脚本路径:sh first.sh       

方法三:source 脚本文件路径(可以没有执行权限) (注意的点是主要是exit)
source first.sh

方法四:其他方法
sh < first.sh 或者 cat first.sh |sh(bash)
sh first.sh            cat first.sh | sh   cat first.sh | bash

4、管道操作

       管道(pipe)操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。在 Shell 脚本应用中,管道操作通常用来过滤所需要的关键信息。

 

 三、重定向

重定向> >>: /dev
用户通过操作系统处理信息的过程中,包括以下几类交互设备文件
标准输入(STDIN):默认的设备是键盘,文件编号为 0,命令将从标准输入文件中读取在执行过程中需要的输入数据。
标准输出(STDOUT):默认的设备是显示器,文件编号为 1,命令将执行后的输出结果发送到标准输出文件。
标准错误(STDERR):默认的设备是显示器,文件编号为 2,命令将执行期间的各种错误信息发送到标准错误文件。
从键盘接收用户输入的各种命令字串、辅助控制信息,并将命令结果输出到屏幕上;如果命令执行出错,也会将错误信息反馈到屏幕上

类型

设备文件

文件描述编号

默认设备

标准输入

/dev/stdin

0

键盘

标准输出

/dev/stdout

1

显示器

标准错误输出

/dev/staderr

2

显示器

类型

操作符

用途

重定向输入

<

从指定文件读取数据

重定向输出

>

将标准输出结果保存到指定的文件,并覆盖原有内容

>>

将标准输出结果追加到指定文件的尾部,不覆盖原有内容

标准错误输出

2>

将错误信息保存到指定的文件的尾部,并覆盖原有内容

2>>

将错误信息追加到指定文件的尾部,不覆盖原有内容

混合输出

&>

将标准输出、标准错误保存到同一文件中

2>&1

将标准错误输出重定向标准输出

 

 

 四、变量

1、变量的分类

环境变量:由系统维护,用于设备工作环境
位置变量:通过命令行给脚本程序传递参数
自定义变量:由用户自己定义、修改和使用
预定义变量:Bash中内置的一类变量,不能直接修改

变量的作用 :用来存放系统和用户需要使用的特定参数(或值)
变量名: 使用固定的名称,由系统预设或用户定义
变量值: 能够根据用户设置、系统环境的变化而变化

2、定义新的变量

格式:变量名=变量值
“=”表示赋值
变量命名规则:以字母或下划线开头,区分大小写

查看变量的值
格式:echo $变量名

赋值时使用引号
双引号“”:允许通过$符号引用其他变量值
单引号‘’:禁止引用其他变量值,$视为普通字符
反撇号``:命令替换,提取命令执行后的输出结果,`…`和$(…)作用相同

3、 变量作用范围

       默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用。
       可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。
export 变量名
export 变量名=变量值

4、环境变量

环境变量由系统提前创建,用来设置用户的工作环境。
使用 env 命令可以查看到当前工作环境下的环境变量。
变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录,变量PATH表示可执行程序的默认搜索路径

echo $PATH                    #查看当前搜索路径
PATH="$PATH:/root"            #将/root目录添加到搜索路径
export PATH="$PATH:/root"     #输出为全局环境变量

       环境变量指的是出于运行需要而由 Linux 系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。
       环境变量的值由 Linux 系统自动维护,会随着用户状态的改变而改变。
       使用 env 命令可以查看到当前工作环境下的环境变量,对于常见的一些环境变量应了解其各自的用途。

USER 表示用户名称

HOME 表示用户的宿主目录

LANG 表示语言和字符集

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

PATH 表示命令搜索路径等

RANDOM表示随机数,会返回0-32767的整数

USER表示当前账户的账户名称等,一般都用全大写定义,注意和自定义变量区分

[root@localhost ~]# echo $RANDOM         RANDOM表示随机数,会返回0-32767的整数
20315
[root@localhost ~]# echo $HOME           HOME 表示用户的宿主目   
/root
[root@localhost ~]# echo $USER           变量 USER 表示用户名称
root
[root@localhost ~]# echo $UID
0
[root@localhost ~]# echo $PWD            PWD 表示当前所在的工作目录
/root
[root@localhost ~]# echo $LANG           LANG 表示语言和字符集
zh_CN.UTF-8
[root@localhost ~]# echo $SHELL
/bin/bash

PATH 变量用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux 系统将在 PATH 变量指定的目录范围查找对应的可执行文件,如果找不到则会提示“command not found”。

[root@localhost ~]# test.sh
bash: test.sh: 未找到命令...
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# pwd
/root

这时因为test.sh不在$PATH的目录里面,所以系统无法识别无法直接用,需要跟上绝对路径使用该脚本。

       环境变量的全局配置文件为/etc/profile,在此文件中定义的变量作用于所有用户。每个用户还有自己的独立配置文件(~/.bash_profile)。可以用来长期变更或设置某个环境变量。

5、位置变量

       当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
$n:n为数字,$0代表命令本身,$1-$9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为${10}

6、自定义变量

变量的定义

Bash中的变量操作相对比较简单,不像其他高级编程语言(如C/C++、Java等)那么复杂。在定义一个新的变量时,一般不需要提前进行声明,而是直接指定变量名称并赋给初始值(内容)即可

等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符(如+、-、*、/、.、?、%、&、#等)

echo查看和引用变量的值

通过在变量名称前添加前导符号“$”,可以引用一个变量的值,使用 echo 命令可以查看变量,可以在一条 echo 命令中同时查看多个变量值

Product=Python
Version=2.7.13
echo $Product$Version

当变量名称容易和紧跟其后的其他字符相混淆时,需要添加大括号“{}”将其括起来,否则将无法确定正确的变量名称。对于未定义的变量,将显示为空值

echo选项
echo -n 表示不换行输出
使用echo -e输出转义字符,将转义后的内容输出到屏幕上
常用的转义字符如下:
\c 不换行输出,在”\c”后面不存在字符的情况下,作用相当于echo -n
\n 换行
\t 转义后表示插入tab,即制表符

注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变 量引用

取消定义

unset 变量名

双引号(”)

        双引号主要起界定字符串的作用,特别是当要赋值的内容中包含空格时,必须以双引号括起来;其他情况下双引号通常可以省略

单引号(‘)

当要赋值的内容中包含$、“、\等具有特殊含义的字符时,应使用单引号括起来。
在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待。输入什么就显示什么
但赋值内容中包含单引号(‘)时,需使用\’符号进行转义,以免冲突。

反撇号(`) 不能嵌套

反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。
反撇号括起来的范围内必须是能够执行的命令行,否则将会出错
使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用 “$()”来代替反撇号操作,以解决嵌套的问题

交互式定义变量(read)

-p 提示用户的信息
-s 不显示用户输入的内容,常用于输入密码  read -s -p "input your password:" pass
-t 定义超时时间,超过多长时间没输自动退出
-n 定义字符数

export命令

为了使用户定义的变量在所有的子 Shell 环境中能够继续使用,减少重复设置工作,可以通过内部命令 export 将指定的变量导出为全局变量。用户可以同时指定多个变量名称作为参数(无须使用“$”符号),变量名之间以空格分隔

7、预定义变量

预定义变量是由 Bash 程序预先定义好的一类特殊变量,用户只能使用预定义变量,而 不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用“$”符号和另一个符号组合表示
$#:表示命令行中位置参数的个数
$*:表示所有位置参数的内容,这些内容当做一个整体
$@:表示列出所有位置参数,但是是以单个的形式的列出
$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0 值均表示执行出现异常。
$0:表示当前执行的脚本或程序的名称
$$:表示返回当前进程的进程号
$!:返回最后一个后台进程的进程号

 

五、变量运算

整数变量的运算

运算内容:加(+)、减(-)、乘(*)、除(/)、取余(%)
运算符号:$(()) 和$[]
运算命令:expr和let
运算工具:bc(系统自带)

expr命令(不仅可以运算,还支持输出到屏幕)

常用的几种运算符

+:加法运算。
-:减法运算。
\*:乘法运算,注意不能仅使用“*”符号,否则将被当成文件通配符。
/:除法运算。 
%:求模运算,又称为取余运算,用来计算数值相除后的余数。

常用的运算表达式

i=$(expr 12 \* 5)
i=$((12 * 5))
i=$[12 * 5]
let i=12*5

$(())
let
expr
$[]

$[ ]和$(()) 必须要和echo在一起用因为他只能运算无法输出结果
$[ ]变量的运算,可省略[]里的$
let的运算可以改变变量本身的值,但不显示结果,需要echo,其他的运算方式可以做运算但不改变变量本身的值

i++ 相当于 i=$[$i+1]
i-- 相当于 i=$[$i-1]
i+=2 相当于 i=$[$i+2]

bc(小数运算)

使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进入交互界面,可以用echo结合管道使用

bc做变量的运算:

布尔值:真(true)或 假(false) 成立或不成立

bc还可以做逻辑运算,真为1,假为0

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值