本文最后更新于86 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
今日主题
Shell Script 基础
今日目标
今天学完你要能做到:
1、理解什么是 Shell
2、会写第一个脚本
3、会定义变量
4、会接收参数
5、会输出内容
6、开始建立自动化思维
今天最重要的一句话:
把你平时敲的命令,写成文件,让 Linux 自动执行。
一、什么是 Shell
你可以理解成:
你 <-> Shell <-> Linux内核
Shell 就是:
命令解释器
你输入:
ls
Shell 负责:
接收命令
↓
理解命令
↓
调用系统执行
↓
返回结果
常见 Shell:
bash
zsh
sh
fish
你 Mac 默认大概率是:
zsh
Linux 云服务器常见:
bash
先看自己是什么 Shell
敲:
echo $SHELL
可能输出:
/bin/zsh
或者:
/bin/bash
二、第一个 Shell 脚本
创建:
vim hello.sh
写:
#!/bin/bash
echo hello
echo cloud
echo future
第一行:
#!/bin/bash
这叫:
shebang
意思:
用 bash 去执行。
给权限:
chmod +x hello.sh
执行:
./hello.sh
输出:
hello
cloud
future
三、变量
定义:
name=ByteDance
注意:
= 两边不能有空格
错:
name = ByteDance
使用:
echo $name
输出:
ByteDance
多个变量:
company=Tencent
city=Shenzhen
echo $company
echo $city
系统变量
当前用户:
echo $USER
当前目录:
echo $PWD
家目录:
echo $HOME
当前 Shell:
echo $SHELL
四、接收参数
脚本:
#!/bin/bash
echo 第一个参数: $1
echo 第二个参数: $2
运行:
./test.sh nginx prod
输出:
第一个参数: nginx
第二个参数: prod
以后部署脚本:
./deploy.sh blog prod
就靠这个。
五、命令替换
获取当前时间:
now=$(date)
echo $now
获取当前目录:
dir=$(pwd)
echo $dir
获取当前用户:
user=$(whoami)
echo $user
这个特别常用。
六、Day 7 小实验
直接写:
#!/bin/bash
user=$(whoami)
dir=$(pwd)
time=$(date)
echo 用户: $user
echo 目录: $dir
echo 时间: $time
运行它。
七、Day 7 面试题
什么是 Shell?
答:
Shell 是用户和 Linux 内核之间的命令解释器。
什么是脚本?
答:
把多个命令写进文件,让机器自动执行。
shebang 是什么?
答:
#!/bin/bash
指定解释器。
Day 8:判断 + 循环(脚本有脑子)
今日主题
if / for / while
今日目标
今天学完你要能做到:
1、会写条件判断
2、会判断命令是否执行成功
3、会循环执行任务
4、会批量处理文件
5、开始写简单运维脚本
今天最重要的一句话:
让脚本会判断、会循环、会自动处理任务。
一、if 判断
例子:
#!/bin/bash
num=10
if [ $num -gt 5 ]
then
echo 大于5
fi
输出:
大于5
常见比较:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
字符串判断:
name=cloud
if [ "$name" = "cloud" ]
then
echo yes
fi
二、判断文件是否存在
文件:
if [ -f hello.sh ]
then
echo 文件存在
fi
目录:
if [ -d test ]
then
echo 目录存在
fi
这在部署脚本里很常见。
三、判断命令成功失败
执行:
ping -c 1 www.baidu.com
查看结果:
echo $?
如果:
0
说明成功。
非 0:
失败。
脚本:
ping -c 1 www.baidu.com
if [ $? -eq 0 ]
then
echo 网络正常
else
echo 网络异常
fi
这就是监控脚本雏形。
四、for 循环
for i in 1 2 3 4 5
do
echo $i
done
输出:
1
2
3
4
5
遍历文件:
for file in *
do
echo $file
done
批量创建目录
for i in 1 2 3
do
mkdir test$i
done
生成:
test1
test2
test3
五、while 循环
i=1
while [ $i -le 5 ]
do
echo $i
i=$((i+1))
done
输出:
1
2
3
4
5
六、Day 8 实战脚本
检查 SSH:
#!/bin/bash
systemctl status sshd >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo ssh正常
else
echo ssh异常
fi
这里:
>/dev/null 2>&1
意思:
把输出藏起来,只判断成功失败。
这个以后很常见。
批量 ping
for ip in 8.8.8.8 1.1.1.1
do
ping -c 1 $ip >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo $ip 通
else
echo $ip 不通
fi
done
这已经有点像运维脚本了。
Day 7 + Day 8 今日任务
你只完成这 3 件事:
1、写 hello.sh 并运行
2、写 if 判断脚本
3、写一个 for 循环脚本
复盘模板
# Code 4 云计算复盘 Day 7-8
今日主题:
Shell Script 基础 + 判断循环
掌握:
变量
参数
if
for
while
今天理解:
脚本是自动化基础,可以让 Linux 自动完成重复工作。
面试表达:
Shell 是 Linux 的命令解释器,Shell 脚本是把多个命令写入文件自动执行,可以结合变量、条件判断和循环实现自动化运维任务。