Shell基本语法——认识Shell脚本、变量、数学运算

目录

1.什么是shell?

2.编程语言分类

3.什么是SHELL脚本?

(1)shell脚本概念

(2)第一个shell脚本

(3)创建shell程序的步骤

(4)shell脚本的执行

4.SHELL变量及运用

(1)shell变量的定义规则

(2)变量的分类

(3)命令的替换

(4)shell中单引号和双引号区别

(5)删除变量

(6)环境变量

1)env命令查看所全局变量

2)使用export把这个局部变量输出为全局变量

3)设置PATH环境变量

实战:安装java运行环境——jdk1.8

(7)shell位置变量

5.SHELL中的数学运算

(1)expr命令

(2)使用$(( ))


1.什么是shell?

Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的

Shell基本语法——认识Shell脚本、变量、数学运算

我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。

2.编程语言分类

静态语言:编译型语言 如:c  c++  java

动态语言:解释型语言 如: php  shell  python   perl

3.什么是SHELL脚本?

(1)shell脚本概念

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

(2)第一个shell脚本

Shell基本语法——认识Shell脚本、变量、数学运算

注释:

  • 1、!/bin/bash 作用:告诉脚本使用的是哪种命令解释器。如不指shell,以当前shell作为执行的shell。
  •  2、在shell中以#表示开头,整个行就被当作一个注释。执行时被忽略。
  • 3、shell程序一般以.sh结尾

Shell基本语法——认识Shell脚本、变量、数学运算

(3)创建shell程序的步骤

  • 第一步:创建一个包含命令和控制结构的文件。
  • 第二步:修改这个文件的权限使它可以执行。§ 使用chmod +x  test.sh
  • 第三步:检测语法错误
  • 第四步:执行 ./脚本

(4)shell脚本的执行

  • 1、/root/test.sh  或者 ./test.sh (当前路径下执行脚本的话要有执行权限chmod +x test.sh)
  • 2、bash test.sh 或 sh test.sh  (这种方式可以不对脚本文件添加执行权限)
  • 3、source test.sh (可以没有执行权限)
  • 4、sh < test.sh 或者 cat test.sh |sh(bash)

4.SHELL变量及运用

(1)shell变量的定义规则

  • 变量名称通常是大写字母,它可以由数字、字母(大小写)和下划线_组成。变量名区分大小写;但是大家要注意变量名称不能以数字开头
  • 等号 = 用于为变量分配值,等号 =在使用过程中等号两边不能有空格
  • Shell基本语法——认识Shell脚本、变量、数学运算因为有空格会把空格前面的当作命令
  • 变量存储的数据类型是整数值和字符串值
  • 在对变量赋于字符串值时,建议大家用引号将其括起来。因为如果字符串中存在空格隔符号。需要使用单引号或双引号
  • 要对变量进行调用,可以在变量名称前加美元符号$
  • Shell基本语法——认识Shell脚本、变量、数学运算
  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名或用${变量名}包含
  • 变量值的叠加,使用${}$name是${name}的简化版本,但是在某些情况下,还必须使用花括号引起的方式来消除歧义并避免意外的结果
  • Shell基本语法——认识Shell脚本、变量、数学运算

(2)变量的分类

按照变量的作用可以分成4类:

  • 1、用户自定义变量
  • 2、环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
  • 3、位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  • 4、预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。 

按照变量作用域可以分成2类:

全局变量:是环境变量,其值不随shell 脚本的执行结束而消失。

局部变量:shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。

(3)命令的替换

使用$()或反引号(即Tab键上方的那个键)

Shell基本语法——认识Shell脚本、变量、数学运算

命令的嵌套使用,使用$( $( ))

Shell基本语法——认识Shell脚本、变量、数学运算

实战:分享一个系统时间错误,引起tar报警告

Shell基本语法——认识Shell脚本、变量、数学运算

 注:如果弹出这个消息,是因为咱们的当前系统的时间不对。 比如:当前系统的时间晚于文件的mtime时间

(4)shell中单引号和双引号区别

  • ''       在单引号中所有的字符包括特殊字符($,'',`和\)都将解释成字符本身而成为普通字符
  • ""     在双引号中,除了$, '', `和\以外所有的字符都解释成字符本身,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义
  • 注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用

Shell基本语法——认识Shell脚本、变量、数学运算

给变量值赋于多个单词,需要使用单引号和双引号

Shell基本语法——认识Shell脚本、变量、数学运算

赋值时单引号和双引号的区别

Shell基本语法——认识Shell脚本、变量、数学运算

注:单引号之间的内容原封不动赋值给变量, 双引号之间的内容如有特殊符号会保留它的特殊含义

(5)删除变量

Shell基本语法——认识Shell脚本、变量、数学运算

(6)环境变量

在bash shell中,环境变量分为两类:全局变量和局部变量

  • 全局变量:对于shell会话和所有的子shell都是可见的
  • 局部变量: 它只在自己的进程当中使用

1)env命令查看所全局变量

Shell基本语法——认识Shell脚本、变量、数学运算

Shell基本语法——认识Shell脚本、变量、数学运算

2)使用export把这个局部变量输出为全局变量

Shell基本语法——认识Shell脚本、变量、数学运算

虽然我们设置了export全局变量,但是新开的secureCRT连接中,还是读不到变量VAR1,怎么办?

Shell基本语法——认识Shell脚本、变量、数学运算

让变量永久生效,可以把定义好的变量写入配置文件

当登录系统或新开启一个ssh连接启动bash进程时,一定会加载这4个配置文件:

  • /etc/profile    #系统全局环境和登录系统的一些配置
  • /etc/bashrc    #shell全局自义配置文件,用于自定义shell
  • /root/.bashrc   #用于单独自定义某个用户的bash
  • /root/.bash_profile  #用户单独自定义某个用户的系统环境

如何知道新建一个ssh连接,加载这4个配置文件先后顺序?

可以每个文件的最后,追加一个echo命令,输出一下文件的名字

Shell基本语法——认识Shell脚本、变量、数学运算

Shell基本语法——认识Shell脚本、变量、数学运算

知道加载的顺序有什么用?

可以在这里添加木马程序,只要管理登录系统,就触发木马程序!

Shell基本语法——认识Shell脚本、变量、数学运算

Shell基本语法——认识Shell脚本、变量、数学运算

下面开始插入永久变量:

Shell基本语法——认识Shell脚本、变量、数学运算

Shell基本语法——认识Shell脚本、变量、数学运算

重新打开一个bash

Shell基本语法——认识Shell脚本、变量、数学运算

如果对上面个的四个配置文件都对同一个全局变量赋值,最终结果是最后一个赋值

3)设置PATH环境变量

SHELL要执行某一个程序,它要在系统中去搜索这个程序的路径,path变量是用来定义命令和查找命令的目录,当我们安装了第三方程序后,可以把第三方程序bin目录添加到这个path路径内,就可以在全局调用这个第三方程序的

示例:

Shell基本语法——认识Shell脚本、变量、数学运算

Shell基本语法——认识Shell脚本、变量、数学运算

永久修改,修改配置文件/etc/profile

Shell基本语法——认识Shell脚本、变量、数学运算

Shell基本语法——认识Shell脚本、变量、数学运算

实战:安装java运行环境——jdk1.8

下载jdk-8u161-linux-x64.rpm

  • 1)安装
rpm -ivh jdk-8u161-linux-x64.rpm
  • 2)查看jdk的安装位置,一般在/usr/java 

 

rpm -pql /root/jdk-8u161-linux-x64.rpm
  • 3)编辑/etc/profile
vim /etc/profile
  • 4)在文件的最后添加以下内容
export JAVA_HOME=/usr/java/jdk1.8.0_161
export JAVA_BIN=/usr/java/jdk1.8.0_161/bin
export PATH=${JAVA_HOME}/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
  • 5)使配置文件生效
source /etc/profile
  • 6)验证java运行环境是否安装成功
java -version

(7)shell位置变量

Shell解释执行用户的命令时,将命令行的第一个字符作为命令名,而其它字符作为参数。  

$0  获取当前执行shell脚本的文件文件名,包括脚本路径,命令本身

$n  获取当前脚本的第n个参数 n=1,2.....n 当n大于9时 用${10}表示。

示例:

print.sh脚本:

Shell基本语法——认识Shell脚本、变量、数学运算

运行结果:

Shell基本语法——认识Shell脚本、变量、数学运算

典型的使用:服务器启动传参数

Shell基本语法——认识Shell脚本、变量、数学运算

(8)特殊变量

有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,以下是一些特殊变量:

$*

以一个单字符串显示所有向脚本传递的参数;

如"$*"用【"】括起来的情况、以"$1 $2 … $n"的形式输出所有参数

$#

传递到脚本的参数个数

$$

当前进程的进程号PID

$?

显示最后命令的退出状态;0表示没有错误,其他任何值表明有错误

$!

后台运行的最后一个进程的进程号pid

 

 

 

 

 

 

示例1:

special_variable.sh脚本:

Shell基本语法——认识Shell脚本、变量、数学运算

运行结果:

Shell基本语法——认识Shell脚本、变量、数学运算

示例2:常用的环境变量

env.sh脚本:

Shell基本语法——认识Shell脚本、变量、数学运算

在/root目录下的运行结果:

Shell基本语法——认识Shell脚本、变量、数学运算

将该脚本移动到/opt目录下,切换到/opt目录下执行:

Shell基本语法——认识Shell脚本、变量、数学运算

5.SHELL中的数学运算

(1)expr命令

1)对数字的基本计算,做比较时,输出结果假为0,1为真;特殊符号用转义符

Shell基本语法——认识Shell脚本、变量、数学运算

2)对字符串的处理

Shell基本语法——认识Shell脚本、变量、数学运算

(2)使用$(( ))

格式:((变量名=表达式1,表达式2))

特点:

  • 1、在双括号结构中,所有表达式可以像c语言一样,如:++a,a++,b--等。a++  等价于 a=a+1,并且它们与C语言中是一样的规则
  • 2、在双括号结构中,所有变量可以不加入:“$”符号前缀。
  • Shell基本语法——认识Shell脚本、变量、数学运算
  • 3、可以使用$对双括号进行调用
  • Shell基本语法——认识Shell脚本、变量、数学运算
  • 4、支持多个表达式运算,各个表达式之间用“,”分开
  • 5、在双括号中有多个表达式时,对它取$进行调用,之前的表达式会被计算,但只会返回最后一个表达式的结果
  • Shell基本语法——认识Shell脚本、变量、数学运算
  • 6、双括号可以进行逻辑运算,四则运算
  • 7、双括号结构 扩展了for,while,if条件测试运算

常用的算数运算符

运算符

   意义

++   --

递增及递减,可前置也可以后置

+  -  ! ~

一元运算的正负号 逻辑与取反

+  -  *  /   %

加减乘除与余数

<   <=   >   >=

比较大小符号

==   !=

相等 不相等

>>  <<

向左位移 向右位移

& ^   |

位的与 位的异或 位的或

&&  ||

逻辑与 逻辑或

? :

条件判断