课程链接
运行环境:WSL Ubuntu OMZ终端
PS:看到老师终端具有高亮和自动补全功能,我连夜肝出oh-my-zsh安装教程,实现了此功能。
这节课主要讲变量的语法、控制流程、shell功能等内容。
修改终端用户名,输入密码后重启终端。
sudo hostname xxx //XXX为新用户名
定义一个变量foo
并赋值
foo=bar
echo $foo //查看foo 的值
在终端中,对空格很敏感。
如果输入foo = bar
则显示错误。
系统会默认调用foo
程序,=``bar
为其两个参数。
-
定义字符串
使用"",''
单引号定义字符串,但''
无法引用变量
-
定义函数
这时老师举例mcd()
函数,vi
在普通用户下无法写入文件,我们可以利用sudo vi
来创建mcd()
函数
sudo vi mcd() //进入vi界面
vi
基本用法
键入a
或i
即为写入模式,可以敲入代码
mcd() {
sudo mkdir -p "$1"
cd "$1"
}
按下Esc
退出写入模式,:wq
保存退出vi
source mcd.sh
运行脚本
mcd test
测试脚本
后面是关于$0
、$1
、$?
的用法,不再赘述。
- 逻辑字符
||
相当于数学中的逻辑字符或
,前一个表达式为真,则不再运行后面的表达式,前面表达式为否,则运行第二个表达式。
false || echo "Hello world"
true || echo "will not be printed"
&&
相当于与
true && echo "things go well"
false && echo "this will not print"
$(表达式) 将表达式结果作为字符串输出
foo=$(pwd)
echo $foo
echo "we are in $foo"
·流程控制
<(
等方向字符,可以将为命令提供文件句柄,提供临时文件至父文件夹,因为某些函数希望来自具有某些参数的命令。
cat <(ls) <(ls ..)
```
convert image.jpg image.png
touch foo{,1,2,10}
mkdir joo kar
touch {joo,kar}/{a..c}
touch joo/x kar/y
diff <(ls joo) <(ls kar) ##比较两者区别
vim script.py
编写脚本,实现与机器交互
import sys
for arg in reserved(sys.argv[1:]):
print(arg)
其中,sys.argv[1:]
类似于$1
、$#
等参数变量
退出vi
后,运行程序
python3 script.py a b c
shell本身debug程序比较鸡肋,可以采用shellcheck
来调试程序。
shellcheck mcd.sh
ls -l
以详细列表显示当前路径文档
man conmond
查看某命令使用方法
find . -name src -type d
在当前文件夹查找命名中src
的文件夹
find . -path '**/*.py' -type f
查找某个路径下所有py
类型的文佳
locate XXX
定位某类文件