Shell这东西啊,说到底就是个翻译官。

你把鼠标点来点去,它看不懂。

你,那得低下头,使用键盘敲击命令,如同与那个有些耳背但脾气挺和善的老前辈聊天一般。

你敲击ls,那么他会将当前文件夹里头所包含的东西罗列与你看,你敲击cd ..,于是他会引领你退回到紧挨着的上一层目录。

没有花里胡哨的动画,就一行行字在那儿蹦 。

好多人初次碰到,会感觉这何物呀,乌黑一片,压根比不上windows的那个“此电脑”美观。

但你知道吗,好看的东西往往不中用

等你有那么一天,需要一口气去处理一万个文件,为这些文件进行重命名,还要对它们进行压缩,之后再上传,哪怕鼠标点击到手抽筋,也根本做不完的时候。

唯有你能够领会,那个颜色漆黑的窗口之中,几行脚本一瞬间快速跑完,那般感受——恰似在炎炎夏日猛灌一口冰爽可乐,通体畅快。

什么是shell脚本程序_Shell脚本程序结构_LinuxShell脚本编程基础

脚本?

不就是把命令攒起来

说白了,脚本特简单。

平日里于终端之中逐个逐个敲下的那些指令,有这样一条,即cd /var/log,接着呢,还有一条是grep"error" ,随后又有一条是tar -cvf log.tar.gz .log ,诸如此类……

对,你仅需去创建一个新的文件,就比如说称作 clean.sh 的这个,然后把那些命令依照相应顺序抄录进去。

什么是shell脚本程序_Shell脚本程序结构_LinuxShell脚本编程基础

写上 #!/bin/bash 在第一行,告知电脑“以bash这个翻译官来读取我的话语”。

然后呢?

chmod +x clean.sh

./clean.sh

完事儿了。

电脑随即如同一个呆萌的愣头青那般,规规矩矩地将你录入的指令逐个依次予以执行。

这就是脚本。

把重复的劳动,交给不会抱怨的机器。

那些看起来像天书的东西

变量不是数学,是抽屉

我们有可能会看到,名为“Tom”的代码,以及输出变量“name”值的那部分代码。

那个被称作等号的符号,并非数学意义上所表达的等于,而是有着这样一种含义,即把右边呈现的字符串放置到左边的盒子里面。

要用的时候,在盒子名前加个 $,把里面的东西取出来 。

条件判断,就是替电脑做选择

if [ -f "file.txt" ]; then...

其翻译过来便是:若于现今目录之下寻觅得着file.txt此一文件,那么……若于现今目录之下寻觅得着file.txt此一文件,那么……有这般情况,要是在当前所处目录当中发现了file.txt这个物件,那么……。

千万别被那些方括号给吓得够呛,它们可是电脑的“眼睛”呢,能够帮你瞅瞅文件到底在不在,还能瞧瞧两个数字究竟谁大谁小。

凭什么这玩意能让你“喝咖啡”

我以前也傻。

新来一台服务器,vim /etc/... 进去改配置。

新来十台服务器,还是这么干。

到了改第五台之际,眼睛已然花了,有一个参数给漏掉了,进而致使所有的服务无一起动起来,最终被骂得极其厉害。

后来学乖了。

写个脚本:

#!/bin/bash
# 一键配置新服务器,喝咖啡专用
echo "正在创建用户..."
useradd -m deploy
echo "正在配置 SSH..."
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
echo "搞定了,老板,你的咖啡呢?"

以后再来新机器,就一行 ./setup.sh

我手端着杯子置身于一旁,眼睛注视着屏幕,屏幕上的内容刷刷刷地滚动着,那种感受,要怎么去形容呢——机器作为被役使的一方,而你身为掌控的主体。

别怕那些奇怪的符号

$0, $1:这是脚本自己拿到的“名字”和“第一个参数”。

假设你以这样的方式 ./user.sh root做操作的时候,那么 $0这个所代表的便是 ./user.sh,而 $1所代表的则是 root

| :管道。

把前一个命令的输出,直接塞给后一个命令当输入。

举个例子,那 cat access.log | grep"404" 这般,乃是将日志文件之中的内容,交付给 grep 去予以过滤,仅仅把 404 错误的那些行挑选出来。

一开始接触这些,肯定晕。

晕就对了。

谁不是这么过来的。

初涉写脚本之域时,我忘却为变量添加上 $,如此一来,电脑便把变量名视作普通字符串予以打印呈现,于此状况下,我还困惑思索良久,内心暗自揣度“为何屏幕之上所显示的分明是 name,却并非 Tom 呢?”。

而后察觉到,实际上呀,是得书写 echo $name,并非 echo name

这种傻事,不自己踩一遍坑,看再多教程也记不住。

几个练手的小玩意儿

想知道系统里有多少人能登录?

找到"/bin/bash" 在"/etc/passwd" 中出现的次数并计数。

想知道现在有多少人连你的服务器?

执行“netstat -ntu”命令,从中筛选出处于“ESTAB”状态的信息,接着对筛选出的信息执行“wc -l”命令以统计行数。

甚至...在命令行里下盘国际象棋?

有人真的这么干过 。

就是这样的Shell,模样瞧着简陋到了极点,然而只要你愿意开动脑筋,它所能展现出的花样,远远超出你的想象范围。

最后说一句:

别指望看一遍就全记住。

前往开启你的终端,敲击几下 cd,再敲击 ls,尝试去创建一个 .sh 文件,将那些每一天你都有必要去敲击的重复性命令放置进去。

往后某一日,当你注视着屏幕,发觉自身在不借助鼠标的情形下,能够顺畅自如且如行云流水般操作电脑之际——。

你就懂我今天说的这些话了。

什么是shell脚本程序_Shell脚本程序结构_LinuxShell脚本编程基础