计算机教育中缺失的一课: Shell

本文探讨了Shell在计算机教育中的重要性,介绍了Shell的基础,包括环境变量、流和管道、权限等概念。讲解了Shell脚本编写,如Shebang、变量和权限控制,并提到了常用的命令如find、locate、grep以及目录导航技巧。文章强调了Shell在提升效率和自动化任务中的作用。
摘要由CSDN通过智能技术生成

计算机教育中缺失的一课: Shell

简介

最近打算刷完MIT 的The Missing Semester of Your CS Education, 通常 Computing Ecosystem Literacy 相关的知识都是交给 CS 系的学生自己去学习, 因此这门课的目的是教给学生如何实用工具. 我会按照每个章节记录一下相关的内容.

基础

Shell 通过最基本的文字接口让我们充分使用计算机的各项功能. 这门课程使用 Bourne Again SHell(bash), 首先打开终端尝试以下命令

➜  ~ date
2020年 7月 9日 星期四 16时30分49秒 CST
➜  ~ echo hello
hello
➜  ~ echo Hello World
Hello World

空格在 Shell 中极其重要, 它通过空格分隔参数, 例如想要访问文件夹My Photos, 需要使用转义字符, 因此产生单引号和双引号, 其区别在于, 单引号中所有字符为字面值(不进行转义), 双引号中的$ (参数替换) 进行转义操作, 例如:

➜  Downloads mkdir "My Photos"
➜  Downloads cd My Photos
cd: string not in pwd: My
➜  Downloads cd My\ Photos
➜  My Photos cd ..
➜  Downloads cd "My Photos"
➜  My Photos ..
➜  Downloads cd 'My Photos'
➜  My Photos cd ..
➜  Downloads foo=bar
➜  Downloads echo "$foo"
bar
➜  Downloads echo '$foo'
$foo
➜  Downloads echo $foo  
bar

环境变量

Shell 通过环境变量寻找dataecho, 环境变量为$PATH, 可以采用which 判断某条指令所在的路径

➜  Downloads echo $PATH
/Users/lihao/anaconda3/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/usr/local/share/dotnet:/opt/X11/bin:~/.dotnet/tools
➜  Downloads which python
/Users/lihao/anaconda3/bin/python

流和管道

>< 分表表示输出流和输入流的操作, 此外>>表示追加输出, |表示管道操作, 他会将两个不相关的程序联系起来, 前者的输出作为后者的输入. 例如:

➜  Downloads echo hello > hello.txt
➜  Downloads cat hello.txt 
hello
➜  Downloads cat < hello.txt 
hello
➜  Downloads cat < hello.txt > hello2.txt
➜  Downloads cat hello2.txt 
hello
➜  Downloads cat hello.txt >> hello2.txt 
➜  Downloads cat hello2.txt 
hello
hello
➜  Downloads ls -l / | tail -n1
lrwxr-xr-x@  1 root  admin    11 10  8  2019 var -> private/var

注意最后一条, ls 显示根目录/下的内容, 然后教给tail -n1 输出内容的最后一条.

权限

对于某些操作需要采用sudo, 赋予超级用户(super user) 或者(root) 权限, 在管道操作时, 由于各个操作分隔开来, 可能需要多条 sudo, 例如:

➜  Downloads sudo ls -l / | sudo tail -n2
drwxr-xr-x@  11 root  wheel   352 10  8  2019 usr
lrwxr-xr-x@   1 root  admin    11 10  8  2019 var -> private/var

Shell Scripting

脚本可以通过如下方式编写:

➜  Downloads cat mcd.sh 
mcd () {
   
    mkdir -p "$1"
    cd "$1"
}
➜  Downloads source mcd.sh 
➜  Downloads mcd testtest cd ..
# mkdir test , cd test  

$ 后面可以跟一些特殊的参数, 例如

  1. $0 表示脚本的名字, 例如在本例中, 为
  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值