1. shell脚本入门
1.1 脚本格式
脚本以#!/bin/bash开头(指定解析器)
1.2 第一个shell脚本
(1)首先创建一个helloworld.sh文件

(2)输入解析器和内容,并保存

(3)执行脚本,可以使用sh、bash、./(./是相对路径,是自己调用自己,会导致权限不够,需要修改权限,chmod修改权限)

1.3 第二个shell脚本:多命令处理
需求:在/home/script/目录下创建一个banzhang.txt,在banzhang.txt文件中增加“banzhang”
(1)创建batch.sh

(2)编写脚本,>>表示为追加

(3)执行,并查看


2. shell中的变量
2.1 系统变量
$HOME、$PWD、$SHELL、$USER等
更加方便调用。

2.2 自定义变量
2.2.1 基本语法
(1)定义变量:变量=值(等号两边没有空格)
实例:

(2)撤销变量:unset 变量
实例:

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

2.2.2 变量定义规则
1. 变量名称可以由字母、数字、下划线组成,但是不能以数字开头,环境变量名建议大写。
2. 等号两侧不能有空格。
3. 在bash中,变量默认类型都是字符串类型,无法直接进行数值计算。
4 . 如果变量的值有空格,需要使用双引号或单引号括起来。
5. 可把变量提升为全局环境变量,可供其他shell程序使用。通常用于java home,hadoop home等。
实例:
(1)定义一个c变量,在写入helloworld脚本


(2)执行脚本发现并没有c变量的值

(3)使用export将c变量提升为全局变量,然后执行脚本,然后可以发现c变量的值

2.3 特殊变量
2.3.1 $n
$n(功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10})
实例:创建一个脚本,diyi为第一参数,dier为第二参数,因为后续脚本里没写入新的参数,所以disan不显示;



2.3.2 $#
功能描述:获取所有输入参数个数,常用于循环;
实例:获取输入三叔的个数



2.3.3 $*、$@
$*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体;
$@:这个变量也代表命令行中所有的参数,$@把每个参数区别对待;
实例:



2.3.4 $?
最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量为非0(具体是那个数,又命令自己来决定),则证明上一个命令执行不正确。
实例:

3. 运算符
1. 基本语法
(1)$((运算符))或$[运算符]
(2)expr +,-,\*,/,% 加,减,乘,除,余
注意:expr运算符间要有空格;
实例:

4. 条件判断
1. 基本语法
[ condition ]:注意condition前后要有空格;
2. 常用判断条件

实例1:判断1是否大于2,通过$?查看;判断3是否大于2,通过$?查看

实例2:判断helloworld.sh是否有写权限

3. 多条件判断(&&条件与,表示前一条命令执行成功时,才能执行后一条命令,||条件或,表示上一条命令执行失败时,才执行下一条命令)
5. 流程控制
5.1 if判断
语法:

注意:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格;
(2)if后要有空格;
实例:输入一个数字,如果是1,则输出one,如果是2,则输出two,如果是其他什么也不输出。



5.2 case判断
语法:

注意:
(1)case行尾必须为单词in,每一个模式匹配必须以右括号“)”结束;
(2)双分号“;;”表示命令序列结束,相当于java中的break;
(3)最后的“*)”表示默认模式,相当于java中的default;
实例:输入一个数字,如果是1输出one,如果是2输出2,如果是其他输出qita



5.3 for判断
语法:

或

实:1:1加到100


实例2:打印所有输入参数






5.4 while判断
语法:

实例:1加到100



6. read读取控制台输入