文章目录
一、认识 Shell
1.1什么是 Shell
Shell 本质上是 linux 命令,一条一条命令组合在一起,为了实现某一个目的,就变成了shell脚本。它从一定程度上 减轻了工作量,提高了工作效率。
Shell 是一个命令行解释器(不同于gcc是编译器),将用户命令解析为操作系统所能理解的指令,从而实现用户与操作系统的交互。
1.2使用 Shell 打印 “hello world”
直接使用 vim编辑器创建一个以 .sh 文件后缀的文件
且程序第一行必须以 #!/bin/bash 开头,告诉系统是用 bash 来执行该文件的程序
1.2.1执行 Shell 脚本的方法
法一:
写好 Shell 脚本后,我们发现这个以 .sh 为后缀名的文件没有可执行权限
那就给这个文件加上可执行权限之后,再执行 chmod +x test.sh
法二:
还可以直接使用 bash 来执行 .sh 文件
二、Shell 中的变量
1.用户自定义变量
1.1变量的命名
和 C语言一样的规则,由字母,数字,下划线组成,不能以数字开头
1.2变量的数据类型
在 Shell脚本中的没有具体的数据类型,所有数据都被理解为字符串
1.3变量的赋值
变量名=数据
注意:等号两边不能有空格
赋值完成后不需要以分号结束
写数据时可以直接赋值,也可以使用单引号或双引号,但双引号和单引号有区别
单引号:不能引用其他变量的值
双引号:可以引用其他变量的值
1.4变量的引用
1. $变量名
2. ${变量名}
1.5变量的删除
unset 变量名
注意:在 Shell 脚本中变量定义出来都是以全局变量来理解
2.位置变量
由系统提供的参数称为位置变量,和命令行参数具有相同的效果,即一开始运行程序时传递的参数
$0 : 脚本文件名
$1 : 命令行第一个参数
$2 : 命令行第二个参数
$3 : 命令行第三个参数
..
$n : 命令行第 n个参数
注意:这里大于 9 的数调用需要加 { },不然程序会认为是一位
3.预定义变量
预定义变量是在 Shell 一开始就定义了的变量
$# : 命令行参数的个数,除去 $0
$* : 所有命令行参数 ,出去 $0
$@ : 和 $* 相同的用法
$? : 获取上一条命令退出的状态值 (Shell中 0为真,1为假)
$$ : 获取当前进程的 pid 号
4.环境变量
环境变量用于所有的用户进程
常用的环境变量
PATH 命令所示路径,以冒号为分割;
HOME 打印用户家目录;
SHELL 显示当前Shell类型;
USER 打印当前用户名;
ID 打印当前用户id信息;
PWD 显示当前所在路径;
TERM 打印当前终端类型;
HOSTNAME 显示当前主机名;
PS1 定义主机命令提示符的;
HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间;
RANDOM 随机生成一个 0 至 32767 的整数;
HOSTNAME 主机名
设置环境变量的方法
echo 显示指定的环境变量
export 设置新的环境变量
env 显示所有的环境变量
set 显示所有本地定义的 Shell 变量
unset 清除环境变量
三、Shell 中的语句
1.说明性语句(代码注释)
在代码中起到解释作用,和 c语言 的注释相同效果
1.1注释一行
# : 注释 # 后的一行内容
1.2注释代码块
1. :<<EOF
代码块
EOF
2. :<<?
代码块
?
2.功能性语句
2.1输入语句 read
从键盘获取数据
read 变量名 : 什么都不提示,将输入的数据存放到变量中
read -p : 在输入的时候可以携带提示语句
read -p "请输入一个数: " 变量名
read -s : 静默输入,即在输入的时候不显示输入的内容
read -s 变量名
read -n : 在输入的时候限定输入位数,位数一旦达到则立即停止输入
read -n 变量名
read -t : 在输入的时候限定输入的时间,超过时间则立即停止输入
read -t 限定的秒数变量
这里拿 read -p 举例,其他的大家可以自己尝试
注意
read 后面可以同时跟多个变量,当输入的变量数比自定义的变量数多,是如何存放的呢?
这里我们发现,超出的数都赋值给了最后一个变量