2022-02-11 · 3

Shell 脚本

linuxshell

这篇文章发布已超过两年,内容可能已过时。

-   chmod 700(755) [a.sh](http://a.sh) → ./a.sh
  • 变量赋值
    • TXT=”HelloWorld”
    • = 两侧不能有空格
  • 变量引用
    • 可以像 ${TXT} 这样使用变量
    • “${TXT}”
  • 读取输入
    • read

条件语句

  • if [ 条件1 ]; then
    • 条件 1 为真时执行的命令
  • elif [ 条件2 ]; then ←- 需要条件时可添加
    • 条件 1 为假且条件 2 为真时执行的命令
  • else
    • 条件 1、条件 2 都为假时执行的命令
  • fi

比较表

数值比较 / 说明 / 字符比较 / 说明 / 文件比较 / 说明

<table style="border-collapse: collapse; width: 100%;" border="1" data-ke-align="alignLeft"><tbody><tr><td>A -eq B</td><td>A 与 B 是否相等</td><td>A = B</td><td>字符 A、B 是否相等</td><td>-d file</td><td>文件是否存在且为目录</td></tr><tr><td>A -ge B</td><td>A 是否大于等于 B</td><td>A != B</td><td>字符 A、B 是否不同</td><td>-e file</td><td>文件是否存在</td></tr><tr><td>A -gt B</td><td>A 是否大于 B</td><td>A < B</td><td>字符串 A 是否小于 B(按字节)</td><td>-f file</td><td>文件是否存在且为文件</td></tr><tr><td>A -le B</td><td>A 是否小于等于 B</td><td>A > B</td><td>字符串 A 是否大于 B(按字节)</td><td>-r file</td><td>文件是否存在且可读</td></tr><tr><td>A -lt B</td><td>A 是否小于 B</td><td>-n A</td><td>A 的字符串长度是否大于 0</td><td>-s file</td><td>文件是否存在且非空</td></tr><tr><td>A -ne B</td><td>A 与 B 是否不相等</td><td>-z A</td><td>A 的字符串长度是否为 0</td><td>-w file</td><td>文件是否存在且可写</td></tr></tbody></table>

case

case 变量 in
	模式1)
		模式1为真时执行的命令;;
	模式2)
		模式2为真时执行的命令;;
	*)
		上面指定的所有模式都不匹配时执行的命令;;
esac

循环

for

for 变量 in 要遍历的数据
do
	重复执行直到数据结束的命令
done

while

while 条件
do
	条件为真时重复执行的命令
done
  • 主机名输出循环
#!/bin/bash

for SVR in 22.1.24.10 22.1.24.20 22.1.24.30
do
	echo "This is ${SVR} Server"
	ssh ${SVR} "hostname"
done
  • 使用 seq 的循环
for NUM in $(seq 1 3)
do
	echo "输出 [${NUM}]"
	echo ""
done
  • 制作 nginx start/restart/stop/status shell
#!/bin/bash

 ./nginx.sh start
 ./nginx.sh restart
 ./nginx.sh stop

CMD=$1

case "$CMD" in
start)
	systemctl start nginx;;
restart)
	systemctl restart nginx;;
stop)
	systemctl stop nginx;;
status)
	systemctl status nginx;;
*)
	echo "wrong code";;
esac
  • 示例 1:负载达到 5 以上则输出消息

  • 示例 2:输出 nginx 的进程号后关闭系统

    • ps - ef | grep nginx
    • pgrep -l nginx / pgrep -a nginx / ps axfwwww | grep nginx
    • systemctl status nginx | grep nginx→
  • 示例 3:查出 hostname 后,判别它是否为 kerberos 服务器

  • 示例 4:更改网络适配器设置

也试着做相反的情况

  • 示例 5:用一行脚本检查 /var/www/html 是否存在,若存在它是否为文件
  • 示例 6:用 crontab 让每分钟报告系统时间的 shell 文件执行的脚本,整点时输出 "happy day"
  • 示例 7:每 5 分钟把 /var/log/apache2/access.log 文件生成为 ~ .bak(年月日分) 并保存到 /var/log/apache2/backuplog,然后清空 access.log 的内容
  • 开机时应用 iptables NAT,并封锁 TCP 端口 1~80 的转发策略的设置

原文(韩语): tistory — 发布于 2022-02-11,已迁移至本博客。本翻译由 AI 协助完成。

评论

删除这条评论?

相关文章

Shell 脚本 · 나봄하랑