1. shell简介:
Shell是用户与Linux操作系统之间沟通的桥梁,用户可以输入命令执行,又可以利用 Shell脚本编程去运行。
1.1 常见SHELL解释器如下:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
不同的Shell语言的语法有所不同,一般不能交换使用,最常用的shell是Bash,也就是Bourne Again Shell。Bash由于易用和免费,在日常工作中被广泛使用,也是大多数Linux操作系统默认的Shell环境。
1.2 第一个脚本:
#!/bin/bash
#by lutixia
#2020-03-10
#############################
echo "hello world"
1.3 脚本运行方式:
### 方式一:
chmod +x hello.sh
./hello.sh
### 方式二:
bash hello.sh
### 方式三:
. hello.sh
ps:以上三种运行方式,第一种需要有可执行权限,后面两种不需要可执行权限。前两种是在子shell中运行,最后一种是直接在父进程运行,也就是会直接影响当前shell进程。
2. shell变量:
2.1 系统变量:
Shell常见的变量之一系统变量,主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下:
$0 当前脚本的名称;
$n 当前脚本的第n个参数,n=1,2,…9;
$* 当前脚本的所有参数(不包括程序本身);
$# 当前脚本的参数个数(不包括程序本身);
$? 命令或程序执行完后的状态,返回0表示执行成功;
$$ 程序本身的PID号。
2.2 环境变量:
Shell常见的变量之二环境变量,即程序运行时的环境,环境变量详解如下:
PATH 命令所示路径,以冒号为分割;
HOME 打印用户家目录;
SHELL 显示当前Shell类型;
USER 打印当前用户名;
ID 打印当前用户id信息;
PWD 显示当前所在路径;
TERM 打印当前终端类型;
HOSTNAME 显示当前主机名。
2.3 用户变量:
Shell常见的变量之三用户变量,用户变量又称为局部变量,主要用在Shell脚本内部或者临时局部使用,用户变量详解如下:
NGINX_VERSION=nginx-1.18.0.tar.gz 自定义变量NGINX_VERSION;
PREFIX=/usr/local/nginx 自定义变量PREFIX;
### 范例:
#!/bin/bash
#by lutixia
#2021-03-10 20:12:36
#############################
echo -e '\033[32m-----------------------------\033[0m'
PKG_NAME=nginx
URL=http://nginx.org/download/
echo -e "\033[36m请选择你的操作:\033[0m"
echo
echo "1)官方下载$PKG_NAME源码包"
echo "2)编译安装$PKG_NAME服务器"
echo "3)启动$PKG_NAME服务器"
echo "4)查看$PKG_NAME官网下载地址:$URL"
echo -e '\033[32m-----------------------------\033[0m'
3. if判断:
If条件判断语句,通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断,if表达式如下:
if 条件
then
commands
fi
或者:
if 条件;then
commands
else
commands
fi
或者:
if 条件;then
commands
elif 条件
commands
else
commands
fi
if语句会运行if后面的那个条件(命令),如果该命令的退出状态码是0(该命令成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他值, then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。
3.1 数值的比较条件:
n1 -eq n2 检查n1是否与n2相等
n1 -ge n2 检查n1是否大于或等于n2
n1 -gt n2 检查n1是否大于n2
n1 -le n2 检查n1是否小于或等于n2
n1 -lt n2 检查n1是否小于n2
n1 -ne n2 检查n1是否不等于n2
3.1.1 范例猜数字:
#!/bin/bash
#by lutixia
#############################
num=60
read -p "请输入你的数字:" number
if [ $number -gt $num ];then
echo "猜大了哦,再猜一次。"
elif [ $number -lt $num ];then
echo "猜小了哦,再猜一次。"
else
echo "猜中啦,真棒!"
fi
3.2 字符串的比较条件:
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0
3.2.1 范例:
#!/bin/bash
#by lutixia
#############################
read -p "请输入你要安装的软件包名:" name
if [ "$name" = "nginx" ];then
yum install $name -y
elif [ -z "$name" ];then
echo "你还没有输入包名!"
fi
3.3 文件的比较条件:
-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file是否存在并可读
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-o file 检查file是否存在并属于当前用户所有
-G file 检查file是否存在并默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
3.3.1 范例
#!/bin/bash
#by lutixia
#############################
if [ ! -d /usr/local/redis/ ];then
cd /usr/src/
if [ ! -f redis-5.0.5.tar.gz ];then
wget -c http://download.redis.io/releases/redis-5.0.5.tar.gz
fi
tar xf redis-5.0.5.tar.gz
cd redis-5.0.5
make PREFIX=/usr/local/redis/ install
fi
获取文章更新,以及常用软件,可以关注公众号: 笨办法学linux