一篇文章让你彻底掌握 shell 语言
1. 前序
手动安装jdk
# 第1步 切换到家目录
cd
# 第2步 下载jdk镜像源
wget -c https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz
# 第3步 新建/opt/java目录
mkdir /opt/java
# 第4步 解压jdk至/opt/java目录下
tar -xvf jdk-8u151-linux-x64.tar.gz -C /opt/java
# 第5步 设置软链接
ln -s /opt/java/jdk1.8.0_151/bin/java /usr/sbin/java
# 第6步 java命令是否可用
java -version
存在问题:
1、得特别熟悉安装软件
2、每次安装都要去捋安装思路;
3、每安装一步,都需要手动敲命令,耗时耗力;
4、部署n台,更加耗时,效率低…
问题解决方法:shell编程,编写shell脚本
2. shell介绍
2.1. 什么是shell
- shell是一门编程语言,类似python、php一样的解释型编程语言
2.2. 什么是shell编程
编写的代码文件运行在shell编程语言环境中,类似编写运行在python、php编程语言环境下的代码文件,因为shell是一门解释型语言,所以也称为编写shell脚本(shell script),文件名后缀常用.sh
2.3. shell解释器
常见shell解释器有以下几种:
-
Bash (Bourne Again Shell): Bash是最常用的Shell解释器,也是默认的Linux命令行解释器。它继承了Bourne Shell的特性,并添加了许多功能和改进,包括命令历史、自动补全、作业控制等。
-
sh (Bourne Shell): Bourne Shell是Unix系统中最早的Shell解释器之一,它是其他Shell的基础,语法相对简单,常用于编写脚本。
-
csh (C Shell):C Shell使用C语言风格的语法,提供了一些便于程序员使用的功能,如命令行编辑和作业控制。它在某些Unix系统中是默认的Shell解释器。
-
ksh (Korn Shell: Korn Shell是由Bourne Shell和C Shell发展而来的Shell解释器,它继承了两者的特性,并添加了一些新的功能和语法,如命令历史、命令别名等。
-
tcsh (Enhanced C Shell): tcsh是C Shell的扩展版本,提供了更多的功能和命令补全等增强特性。
查看系统正在使用解释器
env
echo $SHELL
查看系统已安装解释器
cat /etc/shells
chsh -l
切换系统解释器
# 需要退出重登
chsh
# 需要退出重登
chsh -s /bin/sh
exec bash
交互式shell和非交互式shell
交互式模式:在终端上执行,shell等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。
[root@centos ~]# pwd
/root
非交互式模式:以shell script(非交互)方式执行。在这种模式 下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。
sh test.sh
3. 基本语法
3.1 第一个shell脚本
# 打开test.sh文件
vim test.sh
# test.sh文件写入内容
echo "hello,world"
# sh解释器执行脚本
sh test.sh
# bash解释器执行脚本
bash test.sh
# 给test.sh加可执行权限
chmod +x test.sh
# 用系统默认解释器运行test.sh脚本
./test.sh
/root/test.sh
# 也可以给test.sh脚本指定shell解释器
[root@centos ~]# cat test.sh
#!/bin/sh
echo "hello,world"
# 推荐这种方式指定shell解释器
[root@centos ~]# cat test.sh
#!/usr/bin/env sh
echo "hello,world"
3.2 注释
注释起到说明描述作用,解释器执行文件(脚本)时会被忽略掉。
- 单行注释:以
#
开头,到行尾内容会被解释器忽略掉 - 多行注释:以
:<<EOF
开头,到EOF
结尾之间的内容会被解释器忽略掉
[root@centos ~]# cat test.sh
#!/usr/bin/env sh
# 作者:buddha
# 作用:测试脚本,可删除
echo "hello,world"
:<<EOF
有以下方式执行:
sh test.sh
bash test.sh
./test.sh
/root/test.sh
EOF
3.3. echo
功能:
可以将文本消息或字符串输出到终端或文件中
语法:
echo [-neE] [arg ...]
选项:
选项 | 说明 |
---|---|
-n | 输出字符串不换行 |
-e | 启用转义字符 |
-E | 禁用转义字符 |
转义字符:
转义字符 | 说明 |
---|---|
\a | 发出蜂鸣器警告声 |
\b | 删除前一个字符 |
\c | \c后面内容不输出,也不换行 |
\f | 换页符,光标停在原处 |
\n | 换行且光标移至行首 |
\r | 回车符 |
\t | 水平制表符,就是Tab键 |
\v | 垂直制表符 |
\\ |
插入\ 字符 |
\e | Esc键 |
\0nnn | 按照八进制ASCII码表输出字符 |
\xhh | 按照十六进制ASCII码表输出字符 |
3.3.1 输出字符串
echo "hello,world"
3.3.2 输出变量
str="hello,world"
echo $str
echo ${str}
3.3.3 启用转义字符
echo -e "hello,world\a"
echo -e "hello\nworld"
echo -e "hello\r