哈哈哈哈哈哈

shell 脚本入门

1)脚本格式

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

2)第一个shell脚本:helloworld.sh

(1)需求:创建一个 Shell 脚本,输出 helloworld
(2)案例实操:

(3)脚本的常用执行方式

第一种:采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)

第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)

注意:第一种执行方法,本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执行
权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。
【了解】第三种:在脚本的路径前加上“.”或者 source
①有以下脚本
②分别使用 sh,bash,./ 和 . 的方式来执行,结果如下:

 

 原因:

前两种方式都是在当前shell中打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。

第三种,也就是使用在脚本路径前加“.”或者 source 的方式,可以使脚本内容在当前shell里执行,而无需打开子shell!这也是为什么我们每次要修改完/ect/profile文件以后,需要source一下的原因。

开子shell与不开子shell的区别就在于环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。

变量

1.1 系统预定义变量

1)常用系统变量

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

2)案例实操

(1)查看系统变量的值

 

 

 (2)显示当前shell中所有变量:set

 

 1.2 自定义变量

1)基本语法

  (1)定义变量:变量名=变量值,注意,=号前后不能有空格

  (2)撤销变量:unset 变量名

  (3)声明静态变量:readonly 变量,注意:不能unset

2)变量定义规则

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

  (2)等号两侧不能由空格

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

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

3)案例实操

(1)定义变量A

 

 (2)给变量A重新赋值

 

 (3)撤销变量A

 

 (4)声明静态变量B=2,不能unset。

 

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

 

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

 

 (7)可把变量提升为全局环境变量,可使其他shell程序使用

 

 

发现并没有打印输出变量 B 的值。

 

 1.2 特殊变量

1.2.1 $n 

1)基本语法

  $n  (功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})

2)案例实操

 

 1.3 $#

  $#  (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)。

2)案例实操

 

 

 

 1.4 $*、$@

1)基本语法

  $*    (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

  $@  (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

2)案例实操

 

 1.5 $?

1)基本语法

  $?  (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个参数,由命令自己来决定),则证明上一个命令执行不正确了。)

2)案例实操

判断helloworld.sh 脚本是否正确执行

 

运算符

1)基本语法

“$((运算式))” 或 “[运算式]”

2)案例实操

计算(2+3)* 2 的值

 

 条件判断

1)基本语法

(1)test condition
 
(2)[ condition ](注意 condition 前后要有空格)
注意:条件非空即为 true,[ atguigu ]返回 true,[ ] 返回 false。

2)常用判断条件

(1)两个整数之间比较

   -eq 等于 (equal)  -ne 不等于 (not equal)

      -lt 小于  (less than)   -le 小于等于  (less  equal)

     -gt 大于   (greater than)   -ge  大于等于  (greater equal)

注:如果是字符串之间的比较,用等号“=”判断相等;用“!=”判断不等。

(2)按照文件权限进行判断

  -r  有读的权限(read)

  -w  有写的权限(write)

  -x  有执行的权限(execute)

(3)按照文件类型进行判断

  -e  文件存在(existence)

  -f  文件存在并且是一个常规的文件(file)

  -d  文件存在并且是一个目录(directory)

 3)案例实操

(1)23是否大于等于22

 

 (2)helloworld.sh 是否具有写权限

 

 (3)/home/atguigu/cls.txt 目录中的文件是否存在

 

 (4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)

 

 流程控制(重点)

1.6 if判断

1)基本语法

(1)单分支

if [ 条件判断式 ];then

  程序

fi

或者

if [ 条件判断式 ]

then

  程序

fi

(2)多分支

if [ 条件判断式 ]

then

  程序

elif [ 条件判断式 ]

then

  程序

else

  程序

fi

注意事项:

①[ 条件判断式 ],中括号和条件判断式之间必须有空格

②if后要有空格

2)案例实操

输入一个数字。如果是1,则输出 banzhang zhen shuai,如果是2,则输出 cls zhen mei,如果是其他,什么也不输出。

 

 

 

 1.7 case 语句

1)基本语法

 

 注意事项:

(1)case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于 java 中的 break。
(3)最后的“*)”表示默认模式,相当于 java 中的 default。

2)案例实操

输入一个数字,如果是 1,则输出 banzhang,如果是 2,则输出 cls,如果是其它,输出renyao。

 

 

 1.8 for循环

1)基本语法1

for ((初始值;循环控制条件;变量变化))

do

  程序

done

2)案例实操

从1加到100

 

 3)基本语法2

for 变量 in 值1 值2 值3............

do

  程序

done

 

 

posted @ 2022-09-27 10:58  爱思凡  阅读(189)  评论(0编辑  收藏  举报