Shel脚本-初步入门之《06》

论坛 期权论坛     
选择匿名的用户   2021-5-23 05:20   21   0
<div class="blogpost-body cnblogs-markdown" id="cnblogs_post_body">
<h1 id="shel脚本-初步入门-06-shell-脚本的建立和执行">Shel脚本-初步入门-06 Shell 脚本的建立和执行</h1>
<h2 id="shell-脚本的建立和执行">6、Shell 脚本的建立和执行</h2>
<h3 id="shell脚本的建立">6.1 Shell脚本的建立</h3>
<blockquote>
  <p>在 <code>Linux</code> 系统中,<code>Shell</code> 脚本(<code>bash Shell</code> 程序)通常是在编辑器 <code>vi/vim</code> 中编写的。推荐使用 <code>vim</code> 编辑器来编写。</p>
</blockquote>
<blockquote>
  <p>事先做一个别名 <code>alias vi&#61;&#39;vim&#39;</code>,使其永久生效,方法如下:</p>
</blockquote>
<pre class="blockcode"><code>[root&#64;oldboyedu ~]# echo &#34;alias vi&#61;&#39;vim&#39;&#34; &gt;&gt;/etc/profile

[root&#64;oldboyedu ~]# tail -1 /etc/profile
alias vi&#61;&#39;vim&#39;

[root&#64;oldboyedu ~]# source /etc/profile</code></pre>
<blockquote>
  <p><strong>1. 脚本开头(第一行)</strong></p>
</blockquote>
<blockquote>
  <p>一个规范的 <code>Shell</code> 脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在 <code>Linux bash</code> 的编程一般为:</p>
</blockquote>
<pre class="blockcode"><code>#!/bin/bash
or
#!/bin/sh # 255 个字符以内</code></pre>
<blockquote>
  <p>注意:这一行必须位于每个脚本顶端的<strong>第一行</strong>,如果不是第一行则为脚本注释行,例如:</p>
</blockquote>
<pre class="blockcode"><code>[root&#64;oldboyedu /server/scripts]# cat test.sh
#!/bin/bash
echo &#34;test start&#34;

#!/bin/bash  #这里就是注释了
echo &#34;test end&#34;</code></pre>
<blockquote>
  <p><strong>2. bash 与 sh 的区别</strong></p>
</blockquote>
<blockquote>
  <p>早期的<code>bash</code> 与<code>sh</code> 稍有不同,它还包含了 <code>csh</code> 和 <code>ksh</code> 的特色,但大多数脚本都可以不加修改地在 <code>sh</code> 上 运行,比如:</p>
</blockquote>
<pre class="blockcode"><code>[root&#64;oldboyedu /server/scripts]# ll /bin/sh
lrwxrwxrwx. 1 root root 4 4月  12 21:35 /bin/sh -&gt; bash

[root&#64;oldboyedu /server/scripts]# ll /bin/bash
-rwxr-xr-x. 1 root root 964608 10月 31 2018 /bin/bash</code></pre>
<blockquote>
  <p>提示:<code>sh</code> 为 <code>bash</code> 的软连接,大多数情况下,脚本的开头使用 <code>#!/bin/bash</code> 和 <code>#!/bin/sh</code> 是没有区别的,但更规范的写法是在脚本的开头使用 <code>#!/bin/bash</code> 。</p>
</blockquote>
<blockquote>
  <p>一般情况下,在安装 <code>Linux</code> 系统时会自动安装好 <code>bash</code> 软件,查看系统的 <code>bash</code> 版本的命令如下:</p>
</blockquote>
<pre class="blockcode"><code>[root&#64;oldboy ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

[root&#64;oldboy ~]# bash --version
GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
许可证 GPLv3&#43;: GNU GPL 许可证版本3或者更高 &lt;http://gnu.org/licenses/gpl.html&gt;

这是自由软件,您可以自由地更改和重新发布。
在法律允许的范围内没有担保.</code></pre>
<blockquote>
  <p>检测系统是否存在漏洞:</p>
</blockquote>
<pre class="blockcode"><code>[root&#64;oldboy ~]# env x&#61;&#39;() { :;}; echo be careful&#39; bash -c &#34;echo this is a test&#34;
this is a test</code></pre>
<blockquote>
  <p>如果返回如下两行,则表示需要尽快升级 <code>bash</code> 了:</p>
</blockquote>
<pre class="blockcode"><code>be careful
this is a test</code></pre>
<blockquote>
  <p>升级方法为:</p>
</blockquote>
<pre class="blockcode"><code>[root&#64;oldboy ~]# yum -y update bash

[root&#64;oldboy ~]# rpm -qa bash
bash-4.2.46-31.el7.x86_64</code></pre>
<blockquote>
  <p>提示:如果没有输出 <code>be careful</code> ,则不需要升级。</p>
</blockquote>
<blockquote>
  <p>下面是 <code>Linux</code> 中常用脚本开头的写法:</p>
</blockquote>
<pre class="blockcode"><code>  1 #!/bin/sh
  2 #!/bin/bash
  3 #!/usr/bin/awk
  4 #!/bin/sed
  5 #!/usr/bin/tcl
  6 #!/usr/bin/expect # expect 解决交互式的语言开头解释器
  7 #!/usr/bin/perl # Perl 语言解释器
  8 #!/usr/bin/env python # Python 语言解释器</code></pre>
<blockquote>
  <p><strong>3. 脚本注释</strong></p>
</blockquote>
<blockquote>
  <p>在 <code>Shell</code> 脚本中,跟在 <code>#</code> 后面的内容表示注释,用来对脚本进行注释说明,注释部分不会被当作程序来执行,仅仅是给开发者和使用者看的,系统解释器是看不到的,更不会执行。提示:注释尽量不要用中文,在脚本中最好也不要有中文。</p>
</blockquote>
<h3 id="shell脚本的执行">6.2 Shell脚本的执行</h3>
<blockquote>
  <p>当 <code>Shell</code> 脚本运行时,它会先查找系统环境变量 <code>ENV</code>,该变量指定了环境变量文件(加载顺序通常是<code>/etc/pr
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP