ubuntu --- 运行.sh文件、编写.sh文件
<p> </p><p><strong><span style="font-size: 18pt">一、运行.sh文件</span></strong></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"><span style="font-size: 16px">(1)使用sh testsh执行
<span style="color: rgba(0, 0, 0, 1)">(2)</span>使用bash testsh 执行
<span style="color: rgba(0, 0, 0, 1)">(3)</span>使用点 执行
<span style="color: rgba(0, 0, 0, 1)">(4)</span>使用source执行</span><br><br><span style="font-size: 16px">./sh 文件开头***的含义:</span><br><span style="font-size: 16px">#!/bin/sh 以下的代码由/bin/sh 来解释</span><br><span style="font-size: 16px">#!/bin/bash 以bash shell来解释</span><br><span style="font-size: 16px">#!/bin/csh 以csh shell来解释</span><br><span style="font-size: 16px">#!/usr/bin/env python 以下代码由python来解释 </span><br><span style="font-size: 16px">#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪</span><br><span style="font-size: 16px">一种 Shell</span><br></span></pre>
</div>
<p> </p>
<p><img src="https://img2020.cnblogs.com/blog/843408/202003/843408-20200327162309804-708956078.png"></p>
<p><img src="https://img2020.cnblogs.com/blog/843408/202003/843408-20200327162042150-1568703354.png"></p>
<p> <img src="https://img2020.cnblogs.com/blog/843408/202003/843408-20200327164027672-1754764741.png"></p>
<p> </p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong><span style="color: rgba(0, 0, 0, 1)">(1)</span>使用sh test.sh执行</strong><br>
</span></p>
<p>使用 sh test.sh 来执行script文件,该方法标明使用 sh
这种shell来执行test.sh文件,sh已经是一种被bash替代的shell.</p>
<p>尽管我们在test.sh中声明使用 #!/bin/bash
来执行我们的文件,但此时使用sh而不是bash,则#!/bin/bash 已不起作用。</p>
<p> </p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong><span style="color: rgba(0, 0, 0, 1)">(2)</span>使用bash test.sh 执行</strong><br>
</span></p>
<p>该方法其实与 sh test.sh 的原理一样,只是使用了 /bin/bash 该种shell来执行我们的脚本文件。</p>
<p>所以,其实使用 dash test.sh' 也是可以的,只是取决于自己想使用那种shell来执行脚本,</p>
<p>但sh、bash、dash三者有些许差别,对于部分关键字如 let,bash支持,而sh和dash并不支持,对于部分关键字则选择使用bash。</p>
<p> </p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong><span style="color: rgba(0, 0, 0, 1)">(3)</span>使用点 . 执行</strong><br>
</span></p>
<p>该种方式使用之前必须为文件添加执行的权限:</p>
<p> <span class="pln">chmod <span class="pun">+<span class="pln">x test<span class="pun">.<span class="pln">sh</span></span></span></span></span></p>
<div class="tcode"> </div>
<p>添加完执行权限之后,便可以使用 ./test.sh 来执行脚本,该方式与 bash test.sh 是一样的 ,默认使用 bin/bash 来执行我们的脚本。</p>
<p>只有该种执行方式需要对文件添加执行权限,其他方式并不需要。</p>
<p> </p>
<p><span style="color: rgba(255, 0, 0, 1)"><strong><span style="color: rgba(0, 0, 0, 1)">(4)</span>使用source执行</strong><br>
</span></p>
<p>使用source则也能够直接执行我们的脚本:</p>
<p> <span class="pln">source test<span class="pun">.<span class="pln">sh </span></span></span></p>
<div class="tcode"> </div>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>区别</strong><br>
</span></p>
<p>当我们使用 sh test.sh 、bash test.sh 、 ./test.sh
执行脚本的时候,该test.sh运行脚本都会使用一个新的shell环境来执行脚本内的命令,</p>
<p>也就是说,使用这3种方式时,其实script是在子进程的shell内执行,当子进程完成后,子进程内的各项变量和操作将会结束而不会传回到父进程中。</p>
<p>能否理解?看下面例子:</p>
<div class="tcode"><ol class="linenums">
<li class="L0"><span class="pun">[<span class="pln">root@ubuntu<span class="pun">]<span class="pln"> <span class="com"># bash test.sh</span></span></span></span></span></li>
<li class="L1"><span class="typ">Please<span class="pln"> input your first name<span class="pun">:<span class="pln"> yao<span class="pun"><==输入<span class="pln">firstname</span></span></span></span></span></span></li>
<li class="L2"><span class="typ">Please<span class="pln"> input your <span class="kwd">last<span class="pln"> name<span class="pun">:<span class="pln"> pentonBin<span class="pun"><==输入<span class="pln">lastname</span></span></span></span></span></span></span></span></li>
<li class="L3"><span class="pln"> </span></li>
<li class="L4"><span class="typ">Your<span class="pln"> full name <span class="kwd">is<span class="pun">:<span class="pln"> yao pentonBin</span></span></span></span></span></li>
<li class="L5"><span class="pun">[<span class="pln">root@ubuntu<span class="pun">]<span class="pln"> <span class="com"># echo $firstname</span></span></span></span></span></li>
<li class="L6"><span class="pln"> <span class="pun"><==这里没有输出</span></span></li>
</ol></div>
<p>如果使用source方法来执行脚本呢?</p>
<div class="tcode"><ol class="linenums">
<li class="L0"><span class="pun">[<span class="pln">root@ubuntu<span class="pun">]<span class="pln"> <span class="com"># source test.sh</span></span></span></span></span></li>
<li class="L1"><span class="typ">Please<span class="pln"> input your first name<span class="pun">:<span class="pln"> yao<span class="pun"><==输入<span class="pln">firstname</span></span></span></span></span></span></li>
<li class="L2"><span class="typ">Please<span class="pln"> input your <span class="kwd">last<span class="pln"> name<span class="pun">:<span class="pln"> pentonBin<span class="pun"><==输入<span class="pln">lastname</span></span></span></span></span></span></span></span></li>
<li class="L3"><span class="pln"> </span></li>
<li class="L4"><span class="typ">Your<span class="pln"> full name <span class="kwd">is<span class="pun">:<span class="pln"> yao pentonBin</span></span></span></span></span></li>
<li class="L5"><span class="pun">[<span class="pln">root@ubuntu<span class="pun">]<span class="pln"> <span class="com"># echo $firstname</span></span></span></span></span></li>
<li class="L6"><span class="pln">yao <span class="pun"><==这里输出<span class="pln">firstname</span></span></span></li>
</ol></div>
<p>
也就是说,source方法执行脚本是在父进程中执行的,test.sh的各项操作都会在原本的shell内生效,</p>
<p><span style="color: rgba(255, 0, 0, 1); font-size: 16px">这也是为什么不注销系统而要让某些写入~/.bashrc的设置生效时,需要使用 source ~/.bashrc 而不能使用 bash ~/.bashrc</span></p>
<p>@www.cppcns.com/os/linux/275965.html</p>
<p> </p>
<p><span style="font-size: 18pt"><strong>二、编写.sh文件</strong></span></p>
<p><span style="font-size: 15px"><strong>(1) 定义变量</strong>:变量名不加美元符号。<br>如:<br></span></p>
<div class="cnblogs_code">
<pre>Num=<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
Var2</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello world!</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p><span style="color: rgba(255, 0, 0, 1)"> </span><span style="font-size: 15px"><span style="color: rgba(255, 0, 0, 1)">注意:变量名和等号之间不能有空格。</span><br><br><strong>(2) 使用变量</strong>:使用一个定义过的变量,只要在变量名前面加美元符号即可.<br>如:<br></span></p>
<div class="cnblogs_code">
<pre>#!/bin/<span style="color: rgba(0, 0, 0, 1)">sh
a</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hello world!</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
num</span>=<span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
echo </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">a is : $a num is : ${num}nd</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p><span style="font-size: 15px">运行结果:<br>a is : hello world! num is : 2nd<br><span style="color: rgba(255, 0, 0, 1)">说明:变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,我们通常加花括号。</span><br><br><strong>(3) 传递参数</strong><br>我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。<br>n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……<br>值得注意的是,$0 获取到的是脚本路径以及脚本名,后面按顺序获取参数,<br>当参数超过10个时(包括10 个),需要使用${10},${11}....才能获取到参数,<br>但是一般很少会超过10 个参数的情况。<br><br>建立脚本文件test.sh<br></span></p>
<div class="cnblogs_code">
<pre>#!/bin/<span style="color: rgba(0, 0, 0, 1)">bash
echo </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">脚本$0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
echo </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">第一个参数$1</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
echo </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">第二个参数$2</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p> <span style="font-size: 15px">调用的时候就可以:sh test.sh 2 3,输出如下:<br>脚本 test.sh<br>第一个参数2<br>第二个参数3<br><br><strong>(4) echo 命令</strong>: echo 用于字符串的输出,常用于观察系统变量的路径。<br>显示普通字符串:echo "learn linux"<br>显示系统库路径:echo $PATH PATH 就是一个系统变量,与windonws 下的环境变量相同,存储<br>默认库的搜索路径<br><br><strong>(5) Shell 脚本文件遍历目录</strong><br>问题:文件夹 /tmp 遍历<br></span></p>
<div class="cnblogs_code">
<pre>#!/bin/<span style="color: rgba(0, 0, 0, 1)">bash
</span><span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span> /tmp<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">
do
echo "Hello, $i"
done</span></pre>
</div>
<p><span style="font-size: 15px"> <img src="https://img2020.cnblogs.com/blog/843408/202003/843408-20200327171216586-1437696521.png"></span></p>
<p> <img src="https://img2020.cnblogs.com/blog/843408/202003/843408-20200330085150979-1875730278.png"></p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
【. . . . . .本博客仅作个人生活、工作、学习等的日常记录。说明: (1)内容有参考其他博主、网页等,有因“懒”直接粘贴来,会备注出处。若遇雷同,或忘备注,并无故意抄袭之意,请诸“原主”谅解,很感谢您的辛勤"笔记"可供本人参考学习。(2)如遇同行,有参考学习者,因个人学识有限,不保证所写内容完全正确。您对本博文有任何的意见或建议,欢迎留言,感谢指正。 (3)若您认为本主的全博客还不错,可以点击关注,便于互相学习。 (4)感谢您的阅读,希望对您有一定的帮助。欢迎转载或分享,但请注明出处,谢谢。. . . . . .】
【作者: Carole0904; 出处: https://www.cnblogs.com/carle-09/】<br><br>
来源:https://www.cnblogs.com/carle-09/p/12582209.html
頁:
[1]