Centos常用命令(六、shell编程)

16.Shell 编程(大数据定制篇)
1)Shell 介绍
Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。示意图:

2)shell 编程快速入门-Shell 脚本的执行方式
(1)脚本格式要求:
①脚本以#!/bin/bash 开头
②脚本需要有可执行权限
案例:创建一个 Shell 脚本,输出 hello world!
①vim hello.sh //编写脚本文件

!/bin/bash

echo "hello wold"

②chmod 744 hello.sh 赋予可执行权限
③./hello.sh

(2)方式 2(sh+脚本),不推荐
说明:不用赋予脚本+x 权限,直接执行即可

3)shell 的变量
(1)Shell 的变量的介绍:
①Linux Shell 中的变量分为,系统变量和用户自定义变量。
②系统变量:$HOME、$PWD、$SHELL、$USER 等等比如: echo $HOME 等等
③显示当前 shell 中所有变量:set
(2)shell 变量的定义
①基本语法:
定义变量:变量=值
撤销变量:unset 变量
声明静态变量:readonly 变量,注意:不能 unset
②案例:
案例 1:定义变量 A
案例 2:撤销变量 A
编写脚本:

!/bin/bash

A=100
echo "A=$A"
echo ""
unset A
echo "A=$A"
显示效果:

案例 3:声明静态的变量 B=2,不能 unset
编写脚本:

!/bin/bash

readonly B=2
echo "B=$B"
unset B
echo "B=$B"

执行报错,静态变量B不可撤销

④小贴士:多行注释
:<< i
A=100
echo "A=$A"
echo ""
unset A
echo "A=$A"
i

(3)定义变量的规则
①变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
②等号两侧不能有空格
③变量名称一般习惯为大写
(4)将命令的返回值赋给变量(重点
①A=ls -la 反引号,运行里面的命令,并把结果返回给变量 A
②A=$(ls -la) 等价于反引号
案例:
编写脚本:

!/bin/bash

RESULT=ls -l /home
echo "result=$RESULT"
MY_DATE=$(date)

echo "date=$MY_DATE"
执行结果:

4)设置环境变量
(1)基本语法
①export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量)
②source 配置文件 (功能描述:让修改后的配置信息立即生效)
③echo $变量名 (功能描述:查询环境变量的值)

(2)快速入门
①在/etc/profile 文件中定义 TOMCAT_HOME 环境变量
编写:

!/bin/bash

TOMCA_HOME=/opt/tomcat
export TOMCAT_HOME

②重新加载修改过的/etc/profile 文件或重启
source /etc/profile

③查看环境变量 TOMCAT_HOME 的值
echo $TOME_HOME

④在另外一个 shell 程序中使用 TOMCAT_HOME
编辑hello.sh

执行结果:

5)位置参数变量
(1)介绍
当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如 : ./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息
(2)基本语法
①$n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
②$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
③$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
④$#(功能描述:这个变量代表命令行中所有参数的个数)
(3)案例:编写一个 shell 脚本 positionPara.sh , 在脚本中获取到命令行的各个参数信息
编写脚本:

!/bin/bach

echo "命令=$0"
echo "参数1=$1"
echo "参数2=$2"
echo "所有参数=$"
echo "所有参数=$@
"
echo "参数数量=$#"

执行结果:

6)预定义变量
(1)基本介绍
就是 shell 设计者事先已经定义好的变量,可以直接在 shell 脚本中使用
(2)基本语法
①$$ (功能描述:当前进程的进程号(PID))
②$! (功能描述:后台运行的最后一个进程的进程号(PID))
③$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
实例:在一个 shell 脚本中简单使用一下预定义变量
编写脚本:

!/bin/bash

echo "当前进程号=$$"

后台方式运行hello.sh

./positionPara,sh 100 200 300 &
echo "最后的进程编号=$!"
echo "执行反馈值=$?"

注释:&:以后台方式运行
执行结果:

7)运算符
(1)基本介绍
学习如何在 shell 中进行各种运算操作。
(2)基本语法
①“$((运算式))”
②“$[运算式]”
③expr
expr m + n
expr *, /, % 乘,除,取余
注意 expr 运算符间要有空格
建议使用第二种方式编写,书写简单
(3)实例:
案例 1:计算(2+3)X4 的值
编写代码:

!/bin/bash

第一种$(())

RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"

第二种$[]

RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"

第三种expr

TEMP=expr 2 + 3
RESULT3=expr $TEMP * 4
echo "result3=$RESULT3"

执行结果:

案例 2:请求出命令行的两个参数[整数]的和
编写脚本:

求两个参数之和

SUM=$[$1+$2]
echo "SUM=$SUM"

执行结果:

8)条件判断
(1)判断语句
基本语法
[ condition ](注意 condition 前后要有空格)

非空返回 true,可使用$?验证(0 为 true,>1 为 false)

应用实例
[ atguigu ] 返回true
[] 返回fals
[condition] && echo OK || echo notok 条件满足,执行后面的语句
(2)常用判断条件
①两个整数的比较
= 字符串比较
-lt 小 于
-le 小于等于
-eq 等 于
-gt 大 于
-ge 大于等于
-ne 不等于
②按照文件权限进行判断
-r 有读的权限 [ -r 文件 ]
-w 有写的权限
-x 有执行的权限
③按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
④案例
案例1:"ok"是否等于"ok

!/bin/bash

if [ "ok"="ok" ]
then
echo "等于"
fi
案例2:23 是否大于等于 22

!/bin/bash

if [ 23 -gt 22 ]
then
echo "大于"
fi
案例 3:/root/install.log 目录中的文件是否存在

!/bin/bash

if [ -e /newdisk/demo.sh ]
then
echo "存在"
fi

执行结果:

①②③④⑤

原文地址:https://www.cnblogs.com/bdzxh/p/14035415.html