【笔记】Shell学习笔记

前言

Unix shell,一种壳层与命令行界面,是UNIX操作系统下传统的用户和计算机的交互界面。第一个用户直接输入命令来执行各种各样的任务。(维基百科

定义解释器

  • 在脚本第一行定义Shell解释器(我这里使用的是zsh)
1
#!/bin/zsh

定义脚本说明

  • 定义脚本的作者、时间、版本号、描述
1
2
3
4
# Author: FeiJu
# Created Time: 2021/10/10 10:10
# Release: 1.0
# Script Description: This is a Shell script

运行脚本

<file>:脚本名

直接执行

  • 附加执行权限,直接执行
1
2
chmod +x <file>.sh
./<file>.sh

使用对应解释器执行

1
sh <file>.sh

以debug方式运行

1
sh -x <file>.sh

查看系统支持的解释器

1
cat /etc/shells

Shell中的特殊符号

  • ~:家目录
  • !:执行历史命令
  • $:取变量的内容
  • +-*/%:数学运算符
  • &:后台执行
  • *:通配符,匹配任意个任意字符
  • ?:通配符,匹配一个任意字符
  • ;:分隔两条命令
  • |:管道符,将第一句的结果传递给第二句作为参数
  • \:转义字符
  • 
    
  • '':单引号,用于括起来字符串。与双引号不同的是,单引号不解释变量
  • "":双引号,用于括起来字符串
  • '''':双单引号,相当于双引号,可以解释变量的字符串

存取变量

  • 变量名尽量大写

存变量

1
2
3
变量名=变量值

let 变量名=变量值

取变量

1
$变量名

变量自增

1
$变量名++

重定向

输入重定向

  • 把命令的处理结果输入到文件
  • 只保存最后一次的输入

<sh>:命令
<file>:文件

1
<sh> > <file>

追加重定向

  • 追加到文件末尾
1
<sh> >> <file>

输入重定向

  • 把执行命令可能会遇到的参数提前追加给命令,实现自动加参数执行命令

<sh>:一个交互式的、可能需要参数的命令
...:顶格写参数,一个参数一行,可以直接用换行代替默认值

1
2
3
<sh> <<EOF
...
EOF
1
2
3
<sh> <<END
...
END

算数运算

  • 只能对整数做运算

expr直接运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 
expr 10 + 3

#
expr 10 - 3

#
expr 10 \* 3

#
expr 10 / 3

# 取余
expr 10 % 3

echo直接运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 
echo $(( 10 + 3 ))

#
echo $(( 10 + 3 ))

#
echo $(( 10 - 3 ))

#
echo $(( 10 * 3 ))

#
echo $(( 10 / 3 ))

# 取余
echo $(( 10 % 3 ))

# 乘方
echo $(( 10 ** 3 ))

赋值变量后打印结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 
let sum=10+3
echo $sum

#
let reduce=10-3
echo $reduce

#
let multiply=10*3
echo $multiply

#
let divide=10/3
echo $devide

通过bc进行计算

安装bc

1
yum install bc -y

进行计算

1
bc

配置支持小数

<num>:支持的小数点后位数

1
scale=<num>

不在交互式下运算

1
echo "10+3" | bc

执行成功判断

  • 查看上一条命令是否执行成功
1
echo $?
  • 如果结果是0,则代表执行成功
  • 如果结果是非0,则代表执行不成功

判断数据是否为整数

  • 任意数字加1,如果报错就说明不是整数
  • 此时可以使用$?来判断是否正确执行,从而判断是否是整数
1
2
expr 7 + 1
echo $?

定义脚本结束

  • 定义脚本结束,释放内存,返回值为数字

<num>:返回值是一个数字,范围为0-28

1
exit <num>

格式化输出

  • 通过echo将一段文字输出到屏幕

-n:输出不换行
-e:遇见转义字符进行转义

\a:发出警告声
\b:删除前一个字符
\c:最后不加上换行符号
\v\f:换行但光标仍旧停留在原来的位置
\n:换行且光标移至行首
\r:光标移至行首,但不换行
\t:插入制表符
\:插入反斜线
\<num>:插入对应ASCII值的字符

-help:查看帮助
-version:查看版本

1
echo

输入

-p <str>:输入事的提示文字
-t<num>:设置超时时间
-s:不回显
-n<num>:限定输入的字符数

1
read

输入后存到一个变量

<str>:变量名

1
read <str>

输出重定向丢弃结果

1
echo "" &> /dev/null

完成

参考文献

哔哩哔哩——Python社区
哔哩哔哩——千锋教育网络安全学院