12-Shell script

蒸汽
蒸汽
发布于 2025-01-11 / 9 阅读
0
0

12-Shell script

一、shell script:

顾名思义,就是为shell写的”脚本“

shell script 是利用 shell 的功能所写的一个“程序(program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面,搭配正则表达式管线命令数据流重导向等功能,以达到我们所想要的处理目的。

简单来说,就是为了 onetouch 就可以实现复杂的功能

作用:

  • 自动化管理

  • 追踪与管理系统的重要工作(例如系统的启动功能就是通过/etc/init.d/rsyslogd这个script去重新启动系统登录文件)

  • 简单的入侵检测(例如写脚本来限制ip访问)

  • 连续指令单一化(多个指令一条执行)

  • 简单的数据处理

使用注意事项: image.png

shell执行的几种方式:

  • 直接下达:必须具备可读可写权限rw

    • 绝对路径:使用 /home/dmtsai/shell。sh 来下达指令;

    • 相对路径:假设工作目录在/home/dmtsai/,则使用 ./shell.sh 来执行

    • 变量“PATH”功能:将 shell.sh 放在 PATH 指定的目录内,例如: “~/bin/ ps:

  • 为什么./shell.sh可以执行script? 因为默认使用者主文件夹下的~/bin/是放入PATH中的,若此时该路径下的sh有rw权限,即可直接执行

  • 为什么 bash ./shell.sh也可以执行? 因为/bin/sh == /bin/bash(链接🔗文件),所以就是直接以bash shell.sh执行(只需要有r权限即可)

示例:

[dmtsai@study ~]$ mkdir bin; cd bin
​
[dmtsai@study bin]$ vim hello. sh
​
#!/bin/bash 
# 宣告本条script所使用的shell为bash,执行该script的时候会加载bash配置文件来支持bash语法
​
# Program:
  # This program shows "Hello World!" in your screen.
​
# History:
​
# 2015/07/16 Bird First release
​
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin: ™/bin export PATH
​
echo -e "Hello World! \a \n"
​
exit 0
#回传值0 通知系统

数值运算: image.png

image.png ps:如果需要计算还有小数点的内容,则配合bs使用

echo "123.123*56.59" | bc

12.2.2 script的执行方式差异

  • 直接执行script(sh script | ./script) 每次执行一个script,会在子程序的bash中执行,子程序中的各项变量或者动作结束后不会返回父程序

  • source 直接在父程序中执行,各项动作会在原本的bash内生效

12.3 善用判断式

12.3.1 test指令测试功能

test [-efd] [file | directory]
#-e: 测试该”文件名是否存在“
#-f:测试“文件名”是否存在且是否为文件(file)?
#-d:测试”文件名是否存在且是否为目录(directory)“

test可配合 && ||等来输出信息

12.3.2 利用判断符号 []

tips:

  • 因为中括号使用在很多地方如万用字符和正则表达式等等,所以如果在bash中使用中括号判断符,中括号两端需要有空白字符分隔

  • image.png

12.3.3 Shell script 的默认变量($0, $1...)

image.png

执行的脚本文件名为$0这个变量,第一个接着的参数就是$1...

$# :代表后接的参数”个数“
$@ :代表” "$1" "$2" "$3" "$4" “ (取决于总共有几个参数)

shift:偏移变量 让脚本后面所接的变量进行偏移

image.png 输出结果如下: image.png

12.4 条件判断式

12.4.1 if...then

单层条件判断式

if [条件判断式];then
  xxx
fi <=将if反过来写,结束

多重条件判断式

if [条件判断式];then
  xxx
else
  xxx
fi <=将if反过来写,结束
​
--------------------------------------
​
if [条件判断式];then
  xxx
elif
  xxx
else
  xxx
fi <=将if反过来写,结束

12.4.2 利用case ..... esac判断

image.png

12.4.3 利用function函数功能

#function 范例
function fun(){
  echo "Your choice is ${1}"
}

tips:function也有类似shell script的默认内置变量机制, $1,$2...指的是给的第1.2...个参数

12.5 loop循环

#不定循环
​
while [ condition ]
do
  xxx
done
​
--------------------------------------
​
until [ condition ]
do
  xxx
done
​
# 固定循环
for var in con1 con2 con3 ...(也可以 seq 1 100 来制造连续整数)
do
  xxx
done
​
------------------------------
​
#for循环数值处理
for ((初始值; 限制值; 执行步阶))
#例如
for((i = 1; i <=${nu}; i = i + 1 ))
do
  xxx
done

12.6 shell script 的追踪与debug

如何在不执行script的情况下进行debug呢? 试试sh吧

sh [-nvx] script.sh
​
选项与参数:
-n :不要执行 script,仅查询语法的问题;
-v:再执行 sccript 前,先将 scripts 的内容输出到屏幕上;
-x :将使用到的 script 内容显示到屏幕上,这是很有用的参数!

image.png


评论