【Linux之轨迹】Shell 脚本笔记梳理


0. 什么是 Shell 脚本

shell 脚本就是将完成一个任务的所有命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限


1. 基本的 Shell 脚本

① 整体准备

在 vim 中第一行定义脚本执行环境(#!是一个组合,不是注释)

#!/user/bin/bashvim 中最后一行可以返回执行结果
exit n(n为数字,其中 0 表示正常)

给予执行权限(不这样的话,需要使用解释器,如 bash <脚本名称>chmod 700 <脚本名称>
注释使用 #进行单行注释

多行注释使用 <<EOF
这里是注释掉的内容
EOF

其中 EOF 可用其他符号代替,如:<<ice
这里是注释掉的内容
ice

② 变量

注意: 变量名和等号之间不能有空格

定义与取值,变量可重复定义
user_name="IceClean"
$user_name${user_name}

定义为只读变量
readonly user_name

删除变量(但不能删除只读变量)
unset user_name

变量类型
1) 局部变量:在脚本中定义,只在当前 shell 有效,其他 shell 无法访问
2) 环境变量:所有的程序都能访问
3) shell 变量:由 shell 程序设置的特殊变量,一部分为局部,一部分为环境
字符串:可以不使用引号,也可以用单引号和双引号
单引号中所有字符原样输出,不接受转义字符,所以单独单引号不允许出现,出现了无法转义
双引号支持转义字符
字符串间可随意拼接,不需要使用加号

字符串操作
1) 获取字符串长度:${#user_name}
2) 提取子字符串:${user_name:1:4}(输出 ceCl)
3) 查找子字符串:`expr index "$username" <字符串>`
	注意:外层为反单引号(飘号),输出的索引从 1 开始
数组:只支持一维数组,并且数组长度没有限制

定义数组:使用括号括起来,使用空格分开;也可以单独定义,下标可以不连续没限制
array_name=("a1" "a2" "a3" ...)
array_name[0]=a0

读取数组,可指定下标与读取所有元素
${array_name[0]}
${array_name[@]}

获取数组长度
${#array_name[@]} 或者 ${#array_name[*]}

③ 函数

格式如下

function name() {
	# 程序段
}

如果有参数的话啊,直接使用 ${1}, ${2} 获取,而不能在括号中声明形参
另外,函数声明必须位于使用之前

可以加 return 返回结果,不加则返回最后一条语句的执行结果

④ 常用符号

取值符号 $

取变量值:$user${user}
其中加花括号可以与其他字符区分开来避免误判,如 ${user}Name

取参数值:${0},${1}
花括号里带数字为获取参数值,其中 0 获取到的是命令的名字,之后为参数

其他用途
1) $@ :获取全部参数的值,加双引号时("$@")输出的所有参数都带双引号
2) $* :与 $@ 相同,只是加双引号("$*")输出的所有参数放在一个双引号中
3) $# :获取到参数的个数
4) $$ :获取脚本运行的进程id号
3) $? :获取到运行结果,也就是 exit n 中的 n 值
判断符号 []

[ "值1" == "值2" ]
注意:值1和值2两边都存在空格,且最好用双引号括起来,避免有带空格的值导致误判
可通过后边加 && 实现值相等执行目标指令

若有多个条件,可以使用 [ "值1" == "值2" -o "值3" == "值4" ]
基本运算

`expr 2 + 3 \* 2` 输出 8
注意:表达式使用反单引号(飘号)括起来,数字和运算符之间需要由空格
注意:乘号*前需要加反斜杠\
关系运算(只支持数字,不支持字符串)

1) -eq 判断是否相等:[ 2 -eq "2" ] 返回 true
2) -ne 判断是否不等:[ 2 -ne "2" ] 返回 false
3) -gt 判断是否大于:[ 2 -gt 1 ] 返回 true
4) -lt 判断是否小于:[ 2 -lt 1 ] 返回 false
5) -ge 判断大于等于:[ 2 -ge 2 ] 返回 true
6) -le 判断小于等于:[ 2 -ge 0 ] 返回 false 
布尔运算
1) !:非运算,[ ! false ] 返回 true
2) -o:或运算,[ true -o false ] 返回 true
3) -a:与运算,[ true -a false ] 返回 false

逻辑运算
1) ||:逻辑或,[ true || false ] 返回 true
2) &&:逻辑与,[ true && false ] 返回 false
字符运算

1) =:判断字符是否相等,[ "a" = "b" ] 返回 false (加上 ! 为判断不等)
2) -z:判断长度是否为 0[ -z "" ] 返回 true
3) -n:判断长度不为 0[ -n "" ] 返回 true (注意:是变量就需要加双引号 "$name", 否则一直为 true)
3) $:判断字符串是否为空,[ $"" ] 返回 false

⑤ 常用指令

输出

echo -选项
-n:不要换行(默认会换行)
-e:接收转义字符(\n 换行,\b 删掉前一个字符)

printf <字符串> 参数
1) %s:给予字符串参数,没有时默认 NULL
2) %d:给予整型,没有是默认 0
3) %f:给予浮点型,没有时默默 0.000000
4) -:表示左对齐,没有时默认右对齐
5) -n.m:n、m 为数字,表示保留 n 个字符,m 位小数(浮点型有)
输入
read -选项 <变量名>
-s:不显示输入内容
-t:后边接数字,表示在多少秒后中止输入
-n:后边接数字,表示最多输入多少位
-p:后边接字符串,为提示输入的信息

2. 控制语句

① 条件判断

if 格式:

if [ 条件判断式一 ]; then
	`条件一成立执行的内容`
elif [ 条件判断式二 ]; then
	`条件二成立执行的内容`
else
	`条件都不成立执行的内容`
fi

case 格式

case $变量 in
	"值1")
	`值1 成立时执行`
	;;  `注意是两个分号`
	
	"值2")
	`值2 成立时执行`
	;;
	
	*)
	`所有值都不成立时执行`
	;;
esac

② 循环

条件循环格式

while [ 条件判断式 ]
do
	`条件成立时执行`
done  `循环的结束`
until [ 条件判断式 ]
do
	`条件不成立时执行,也就是直到条件成立时才停止`
done
for <变量> in <1> <2> ... <值n>; do
	`当变量在值列表中时执行`
done

例:
for str in My name is IceClean; do
	echo $str
done
输出:
My
name
is
IceClean

还可以像其他语言那样,使用
for((i=0; i<=5; i++)); do
	`满足条件时执行`
done

3. 输入输出重定向

在这里插入图片描述

输出重定向

将命令输出内容保存到文件中
command > file
注意: file 中原先的内容将被清空,新内容进行了取代
使用 >> 不会覆盖,而是以追加的方式写入
输入重定向

从文件中获取内容作为输入
command < file

文件描述:

  • 标准输入文件 stdin 的文件描述符为 0,程序默认从 stdin 读取数据
  • 标准输出文件 stdout 的文件描述符为 1,程序默认向 stdout 输出数据
  • 标准错误文件 stderr 的文件描述符为2,程序默认向 stderr 流中写入错误信息
command 2>file
表示将错误信息输出到指定文件中

云海之下,藏匿了亘古传说(IceClean)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒冰小澈IceClean

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值