课程内容
第一个Shell脚本
#!/bin/bash
#注释
echo "Hello"
- 第一行#!指定解释器,只在第一行才有效
- 注释:"#"
变量
a=123
a=hello
a=`pwd`
PATH=${PATH}:path # 变量后接字符串,可以直接拼接字符串
# 【注意】":a"有特殊含义,会指到当前路径
- 不需要定义变量类型[弱类型语言]
- 如a = 123可以是字符串,也可以是整数
特殊变量
位置变量

- 结果:


状态变量
-
$?:【上一条】指令执行结果,0——成功,非0——不成功

-
便于脚本自动判断指令成功与否
-
、$!:当前进程/上一指令的PID,一般用于自动化测试、多脚本交互场景
-
输入:read


- -p:显示友好提示,需在bash下使用
- -s:静默模式
- -t:输入等待时长,超时结束(单位:s)
- 输出:echo
- -e:开启转义
- 输出:printf
- 和C语言的printf非常像!
- [PS]: !和\n放一起有特殊含义,需要分开
- bash下需要分开
- zsh下可以分开,或用\转义
- 一般对于特殊符号,需要警觉!
函数

- 没有形参
- 调用:函数名 参数…

流程控制
do — done 、if — then — fi、case — esac
分支结构
- if

- if用两个中括号[[ ]]的写法,更高级,与TEST表达式兼容性更好
- case

- 分号;;不能没有!, 相当于break,加了break也要有
- 默认情况可用*)
- case用的较少,一般用来做菜单,比if更好
循环结构
- for

- 利用seq生成序列
- 利用ls的匹配规则
- while

- 同样适用test表达式
- 可以初始化变量,否则第一次echo num时,num是空值,表现为空行
当遇到后面的+1时,系统判定它为整数类型,就当作整数用。
- until

- 与while唯一的区别在于:until写的是停止条件,while写的是循环条件
数组

- 数组赋值和使用

- [常用的数组操作]输出数组元素下标

echo ${num[*]}输出数组所有元素
echo ${!num[*]}输出数组下标
num=(1, 2 3 a 3 b)输出初始化
+=追加元素
unset删除数组,或元素[通过下标删除]
随堂练习
1~100的偶数和

- $[ ]可用来做整数运算
- seq效率稍低
暴力求素数

- 函数的return值
- 通过$?获得,在调用函数后echo $?即可,但是return值有范围限制0~255
- 通过命令替换符``取到
- 注意对循环变量i的冲突问题:定义局部变量
- 调试程序
- 习惯:适当的echo输出
- 全局调试: bash -x *.sh
- 局部调试:set -x [代码块] set +x
素数筛

- 方式一方便操作素数,且输出时可减少判断
- 方式二还可以操作合数
该博客围绕Shell脚本展开,介绍了第一个Shell脚本的解释器指定、注释方法,阐述变量、特殊变量(位置变量、状态变量等)的使用,还讲解了函数、流程控制(分支和循环结构)、数组操作。最后给出随堂练习,如1 - 100偶数和、暴力求素数、素数筛,并提及调试程序的方法。




2354

被折叠的 条评论
为什么被折叠?



