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)
标签:脚本,shell,变量,哈哈哈,实操,执行,bash From: https://www.cnblogs.com/xiaofan7788/p/16733825.html