尚硅谷课程【笔记】——大数据之Shell【一】

时间:2025-02-05 11:33:03

课程视频:【【尚硅谷】Shell脚本从入门到实战】

一、Shell概述

为什么要学习Shell?

1)需要看懂运维人员的Shell程序

2)偶尔编写一些简单的Shell程序来管理集群、提高开发效率

什么是Shell?

1)Shell是一个命令行解释器,它接受应用程序/用户命令,然后调用操作系统内核。

2)Shell还是一个功能相当强大的编程语言,易编写、易调试、灵活性强。

二、Shell解析器

Linux提供的Shell解析器有:/bin/sh、/bin/bash等。

sh实际是软连接直接指向bash

三、Shell脚本入门

1、脚本格式

#!/bin/bash开头(指定解析器)

2、创建一个helloworld脚本

创建脚本文件:touch helloworld.sh

#!/bin/bash

echo "helloworld"

运行脚本:sh helloworld.sh或bash helloworld.sh或./helloworld.sh(用户执行,需要有权限)

3、创建一个多命令处理脚本

要求在/home/目录下创建一个banzhang.txt,在该txt文件中增加“I love cls”.

创建脚本文件:touch batch.sh

#!/bin/bash

cd /home/
touch banzhang.txt
echo "I love cls" >> banzhang.txt

运行脚本:bash batch.sh

四、Shell中的变量

系统变量

$HOME、#PWD、$SHELL、$USER等

查看变量值:echo+变量名。如:echo $HOME。

自定义变量

1)定义变量:变量=值。如:NUM=1。

2)撤销变量:unset 变量。如:unset NUM。

3)声明静态变量:readonly 变量(不能被撤销unset)。如:readonly NUMBER=2。

自定义变量定义规则

1)变量名可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

2)等号两侧不能有空格。

3)在bash中,变量默认都是字符串类型,无法直接进行数值运算。

4)变量值如果有空格,需要使用单引号或双引号括起来。

5)把变量提升为全局环境变量,可供其他Shell程序使用:export 变量名。如:export NUMBER。

特殊变量$n、$#、$*、$@、$?

$n:其中n为数字,$0表示该脚本的名字,$1-$9表示传入脚本的1-9个参数。

#!/bin/bash
#创建一个名为parameter.sh的脚本
echo "$0 $1 $2"

运行bash parameter.sh ABC 123,会输出parameter.sh ABC 123。

$#:获取所有输入参数个数。

#!/bin/bash
#创建一个名为parameter.sh的脚本
echo "$0 $1 $2"
echo $#

运行bash parameter.sh ABC 123 abc,会输出

parameter.sh ABC 123

3。

$*:代表命令行中的所有参数,$*把所有的参数看成一个整体。

$@:代表命令行中的所有参数,$@把每个参数区分对待。

#!/bin/bash
#创建一个名为parameter.sh的脚本
echo "$0 $1 $2"
echo $#
echo $*
echo $@

运行bash parameter.sh ABC 123 abc,会输出

parameter.sh ABC 123

3

ABC 123 abc

ABC 123 abc。

$?:最后一次执行命令的返回状态。0表示正确执行,非零表示没有正确执行。

五、运算符

基本语法

1)$((运算式))或$[运算式]

2)expr + - \* /% (expr运算符之间必须有空格

实操

计算2+3:expr 2 + 3

计算(2+3)*4,expr `expr 2 + 3` \* 4 或 $[(2+3)*4]

六、条件判断

基本语法

[ condition ](condition前后要有空格,条件非空即为true)

常用判断条件

常用判断条件
= 字符串比较
-lt 小于 -le 小于等于
-eq 等于 -gt 大于
-ge 大于等于 -ne 不等于
按照文件权限进行判断:
-r 有读的权限
-w 有写的权限
-x 有执行的权限
按照文件权限进行判断:
-f 文件存在且是一个常规文件
-e 文件存在
-d 文件存在且是一个目录

如:

判断23是否小于22:[ 23 -le 22 ]

判断helloworld.sh是否具有写权限:[ -w helloworld.sh]

多条件判断

&&表示前一条命令执行成功后,才执行后一条命令;

||   表示上一条命令执行失败后,才执行下一条命令。