手册:
https://www.gnu.org/software/bash/manual/bash.pdf
cheatsheet:
https://devhints.io/bash
这个网站除了bash的cheatsheet之外,还有好多其他方面的cheatsheet。
参考:
https://www.ibm.com/developerworks/cn/linux/l-linux-shells/
评估Linux中的shell
Ken Thompson于1971年开发了第一个用于UNIX的shell,名为V6 shell。该shell为重定向(< > 和 »)和管道( | 或 ^)引入了一种紧凑的语法,并支持参数扩展的模式匹配,比如*.txt 。但它缺少编写脚本的能力。 |
Bourne shell,由AT&T公司的Steve Bourne开发(1977)。它引入了控制流、循环和变量,从而具备了脚本的能力。
Stephen Richard “Steve” Bourne,1944年生,英国计算机学家。King’s College London本科+Cambridge博士。先后工作于Bell Labs、Silicon Graphics, DEC, Sun和Cisco。ACM主席、皇家天文学会会员。除了bsh之外,他还发明了adb debugger for UNIX。
csh是Bill Joy设计的(1978),它的语法类似C语言,故名。主要改进是添加了历史记录。
William (Bill) Nelson Joy,1954年生,美国计算机科学家。University of Michigan本科+UCB硕士(1979)。他的知名作品包括BSD、vi、csh、chroot、TCP/IP driver、Java、SPARC、Solaris、NFS。Sun创始人兼首席科学家。
tcsh由Ken Greer在CMU开发(1981),它在csh的基础上,提供了文件名补全的功能。后来Mike Ellis又加入了命令补全的功能(1983)。
Korn shell (ksh) 由David Korn设计的(1983),它在bsh的基础上添加了一些csh、tcsh引入的功能。
Bourne-Again Shell(或 Bash)是一个开源 GNU 项目,旨在取代 Bourne shell。它由Brian Fox开发(1989),吸取了ksh、csh等的功能,现已成为世上最流行的shell。在通常语境中,如果没有特指的话,shell一般就是指的bash。
zsh由Paul Falstad开发(1990)。它的功能极其强大,但也由于配置过于复杂,所以初期无人问津。直到有一天,国外有个穷极无聊的程序员开发出了一个能够让你快速上手的zsh项目,叫做“oh my zsh”:
https://github.com/ohmyzsh/ohmyzsh
参考:
https://zhuanlan.zhihu.com/p/19556676
终极Shell——ZSH
吸取了zsh的经验,Fish Shell主打的是开箱即用。
官网:
http://fishshell.com/
参考:
http://www.ruanyifeng.com/blog/2017/05/fish_shell.html
Fish shell入门教程
BusyBox由Bruce Perens设计(1995),号称是“The Swiss Army knife of Embedded Linux”。
Thompson shell以及之后的shell,其设计思路是一个shell主程序+若干命令程序。这里的命令甚至包括shell中的一些语法成分,比如test和[
。是的,你没看错,[
也是一个应用程序。
而BusyBox为了发布和部署的方便,将一个shell和所有命令合并到一个可执行文件中。
官网:
https://busybox.net/
在大多数编程语言中,空格和TAB都不是有意义的字符,有没有或者有多少都无所谓。但Linux Shell不是这样的,尽管它看起来并没有如python那样的对缩进的强制语言规定。
以下是它在使用空格和TAB时的一些细节:
1.makefile文件中,规则定义部分的shell脚本命令需要使用TAB开头,使用空格会出错。
2.if命令的格式:
if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
echo "OK, continue"
fi
注意一下上面脚本中的表达式[]之间的部分。其中所使用的空格不可省略,否则会出错。bash在处理[]表达式的时候,实际上调用了/usr/bin/[
命令。如果把[
当作特殊名称的普通命令的话,就会发现这里的空格用法实际上并不奇怪。
实时查看:
ps | grep $$ | awk '{print $4}'
非实时查看:
echo $SHELL
return用于函数的返回,它只能用在函数中。
exit用于整个shell脚本的退出。
$?
: 上条命令的返回值。
$$
: 当前shell的PID。
$0
:当前Shell程序的文件名。
dirname $0
,获取当前Shell程序的路径。
一行一行echo重定向显然是个笨办法,这里可以使用Here Documents语法。
例子:
(
cat<<EOF
line 1
line 2
EOF
)>a.txt
参考:
https://linux.die.net/abs-guide/here-docs.html
Here Documents
cd -
:回到上一次所在的路径的命令。当需要在两个相隔较远的路径下,相互切换的时候,可以使用该命令。
pushd <dir1>
:将dir1添加到一个栈顶。栈中每个目录都有一个序号(栈顶为0)。使用pushd +n
将第n个目录切换到栈顶。(栈顶即为当前目录,所以无论添加还是切换栈顶,都可以切换当前目录)
pushd -n
的含义刚好相反,它从栈底向栈顶方向计数。
popd
和popd +n
用于从栈中删除目录。
dirs -v
用于查看栈中元素。
bd是cd的升级版,主要处理cd ../../../
这样的回退情况。
假设当前路径为:/home/user/project/
,bd h
可以直接退到/home
,只要输入路径的首字母就可以了。
安装:
sudo apt install bd
echo 'alias bd=". bd -si"' >> ~/.bashrc
source ~/.bashrc
参考:
https://www.jianshu.com/p/53cccae3c443
Linux中的pushd和popd
rename 's/\.pgf/\.tex/' *
复制:Ctrl+Shift+c
粘贴:Ctrl+Shift+v
历史命令搜索:Ctrl+r
输入EOF:Ctrl+D
https://mp.weixin.qq.com/s/DQzlfQXt4dV9PYwoVdomaw
如何开发多彩动感的终端UI应用
export PS1="\u@\H >
https://blog.csdn.net/ice_beauty1/article/details/82923083
定制bash提示符
Shebang(也称为 Hashbang )是一个字符序列#!
,其出现在文本文件的第一行的前两个字符。在文件中存在 Shebang的情况下,类Unix操作系统的程序加载器会分析Shebang后的内容,将这些内容作为解释器指令,并调用该指令,并将载有Shebang的文件路径作为该解释器的参数。
例如:
#!/bin/bash
Ctrl+C
终止并退出前台命令的执行,回到SHELL
Ctrl+Z
暂停前台命令的执行,将该进程放入后台,回到SHELL
jobs
查看当前在后台执行的命令,可查看命令进程号码
&
运行命令时,在命令末尾加上&可让命令在后台执行
fg N
将命令进程号码为N的命令进程放到前台执行,同%N
bg N
将命令进程号码为N的命令进程放到后台执行
for i in {1..255}
do
{
...
} & ##后台并行执行
done
wait ##等待上面的后台进程执行完成
参考:
https://blog.csdn.net/zhaoyq008/article/details/103480909
bash并行
https://www.cnblogs.com/xuxm2007/p/5820633.html
Bash脚本实现批量作业并行化
while getopts ":c:i:b:" opt; do
case $opt in
c) CHARM=$OPTARG ;;
i) IDH_PATH=$OPTARG ;;
b) XX_PATH=$OPTARG ;;
*) echo "Invalid option: -$OPTARG" >&2 ;;
esac
done
https://blog.csdn.net/arpospf/article/details/103381621
Shell命令getopts/getopt用法详解
bash --norc --noprofile
不运行bashrc和bash_profile。
https://github.com/dylanaraps/pure-bash-bible
本项目主要汇总了bash脚本经常会使用到的一些代码片段,并按照字符串、数组、正则表达式、文件处理、变量等常用功能进行分类,并给出了具体的Demo,非常适合初学者以及希望提升工作效率的朋友使用。
https://mp.weixin.qq.com/s/ZaIX8jv9LMWmrHQb4ew-dQ
写好shell脚本的13个技巧
http://www.ywnds.com/?p=12325
Shell版俄罗斯方块
https://mp.weixin.qq.com/s/SBVEo53irSZfI40sBFZXWQ
shift:解决shell编程中的入参问题
https://mp.weixin.qq.com/s/T_XwLS6CIrkXbgXJVIo2Jw
一文了解十大Linux命令行工具!
https://mp.weixin.qq.com/s/euTQJy0HFVQotAY-KI2OzA
10个实战及面试常用Shell脚本编写
https://github.com/jaywcjlove/linux-command
Linux命令大全搜索工具
https://mp.weixin.qq.com/s/xuC_pH1X_GmyK0vVWrBzWQ
10个实战与面试常用Shell脚本编写
https://zhuanlan.zhihu.com/p/84774691
bash下可控任务数的并发执行脚本
https://blog.csdn.net/taiyang1987912/article/details/39551385
shell中各种括号的作用()、(())、[]、[[]]、{}
https://mp.weixin.qq.com/s/NNAjrUv5jBN8zxnsxbBmkw
Shell分析服务器日志命令
https://www.cnblogs.com/chengmo/archive/2010/10/14/1851570.html
linux shell不同进制数据转换(二进制,八进制,十六进制,base64)
https://www.freecodecamp.org/news/command-line-commands-cli-tutorial/
Command Line Commands – CLI Tutorial(powershell)
内核:6.8
LibreOffice:24.2
发布的第一时间,我想使用apt更新,然而这种更新通常会安排到当年10月进行。
所以直到2024.8换了新电脑之后,我才有机会体验新版本。
本次不想再捣鼓硬盘安装了,直接U盘搞定安装。
刻录ISO,早些年一般使用Ultra ISO或者Power ISO,本来想着十几年过去了,win应该自带了吧,毕竟隔壁的ubuntu已经这么做了。结果还是没有。。。
好在,现在有了开源软件Rufus:
https://github.com/pbatard/rufus
您的打赏,是对我的鼓励