空中美男子 發表於 2024-2-20 00:00:00

Shell日常使用的小技巧

<p>
        Shell 脚本在我们日常开发和学习都有举足轻重的地位,比如看一些开源项目,比如项目中的各式各样的脚本,对于促进生产力工具有很大帮助!</p>
<p>
        <img title="Shell日常使用的小技巧" alt="Shell日常使用的小技巧" border="0" src="https://zhuji.jb51.net/uploads/img/202305/be103ea6f2d608a44373c9e9b4537bb5.jpg"></p>
<h3>
        1、命令小技巧</h3>
<h4>
        1、-x命令进行跟踪调试执行</h4>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>num1=10 </span>
</li>
        <li>
                <span>num2=20 </span>
</li>
        <li class="alt">
                <span>if (($num1 &lt;= $num2)); <span class="keyword">then</span><span> </span></span>
</li>
        <li>
                <span>echo num1 lesser equal num2 </span>
</li>
        <li class="alt">
                <span><span class="keyword">else</span><span> </span></span>
</li>
        <li>
                <span>echo num1 greater num2 </span>
</li>
        <li class="alt">
                <span>fi </span>
</li>
</ol>
<p>
        执行:</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>➜ note git:(master) ✗ sh -x /Users/fanhaodong/Desktop/project/test.sh </span></span>
</li>
        <li>
                <span>+ num1=10 </span>
</li>
        <li class="alt">
                <span>+ num2=20 </span>
</li>
        <li>
                <span>+ (( 10 &lt;= 20 )) </span>
</li>
        <li class="alt">
                <span>+ echo num1 lesser equal num2 </span>
</li>
        <li>
                <span>num1 lesser equal num2 </span>
</li>
</ol>
<h4>
        2、-c命令 (执行命令参数)</h4>
<ol class="dp-sql">
<li class="alt">
                <span><span>➜ note git:(master) ✗ sh -c &lt;&lt; EOF " </span></span>
</li>
        <li>
                <span>dquote&gt; echo hello world </span>
</li>
        <li class="alt">
                <span>dquote&gt; echo hello world2 </span>
</li>
        <li>
                <span>dquote&gt; " </span>
</li>
        <li class="alt">
                <span>heredoc&gt; EOF </span>
</li>
        <li>
                <span>hello world </span>
</li>
        <li class="alt">
                <span>hello world2 </span>
</li>
</ol>
<h4>
        3、使用set变量</h4>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span># -v Print shell input lines <span class="keyword">as</span><span> they are </span><span class="keyword">read</span><span>. </span></span>
</li>
        <li>
                <span># -x Print commands <span class="op">and</span><span> their arguments </span><span class="keyword">as</span><span> they are executed. </span></span>
</li>
        <li class="alt">
                <span># -e Exit immediately if a command exits <span class="keyword">with</span><span> a non-zero status. </span></span>
</li>
        <li>
                <span><span class="keyword">set</span><span> -ex </span></span>
</li>
        <li class="alt">
                 </li>
        <li>
                <span>echo <span class="string">"hello world"</span><span> </span></span>
</li>
        <li class="alt">
                 </li>
        <li>
                <span>exit 1 </span>
</li>
</ol>
<p>
        执行</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>➜ makefile git:(master) ✗ sh ./main.sh </span></span>
</li>
        <li>
                <span>+ echo <span class="string">'hello world'</span><span> </span></span>
</li>
        <li class="alt">
                <span>hello world </span>
</li>
        <li>
                <span>+ exit 1 </span>
</li>
        <li class="alt">
                <span>➜ makefile git:(master) ✗ echo $? </span>
</li>
        <li>
                <span>1 </span>
</li>
</ol>
<p>
        帮助可以看:sh -c "help set"</p>
<h3>
        2、语法小技巧</h3>
<h4>
        1、${}和$适用场景</h4>
<p>
        <strong>1)$ 可能有语法歧义,所以一般使用${}</strong></p>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                <span>s=<span class="string">"my name is s"</span><span> </span></span>
</li>
        <li class="alt">
                <span>echo 输出: $sa </span>
</li>
        <li>
                <span>echo 输出: ${s}a </span>
</li>
        <li class="alt">
                 </li>
        <li>
                <span>#输出: </span>
</li>
        <li class="alt">
                <span>#输出: my <span class="keyword">name</span><span> </span><span class="keyword">is</span><span> sa </span></span>
</li>
</ol>
<p>
        <strong>2、((cmd))</strong></p>
<ul>
<li>
                <strong>可以替换[-le ] 命令</strong>
</li>
</ul>
<ol class="dp-sql">
<li class="alt">
                <span><span>num1=10 </span></span>
</li>
        <li>
                <span>num2=20 </span>
</li>
        <li class="alt">
                <span>if (($num1 &lt;= $num2)); <span class="keyword">then</span><span> </span></span>
</li>
        <li>
                <span>echo num1 lesser equal num2 </span>
</li>
        <li class="alt">
                <span>fi </span>
</li>
</ol>
<p>
        <strong>3、cat[&gt;&gt;|&gt;]&lt;</strong></p>
<p>
        如果重定向的操作符是&lt;&lt;-,那么分界符(EOF)所在行的开头部分的制表符(Tab)都将被去除。这可以解决由于脚本中的自然缩进产生的制表符。</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>➜ test cat &gt; glide.yaml &lt;&lt; EOF </span></span>
</li>
        <li>
                <span>heredoc&gt; <span class="keyword">name</span><span>: tom </span></span>
</li>
        <li class="alt">
                <span>heredoc&gt; age: 10 </span>
</li>
        <li>
                <span>heredoc&gt; hobby: </span>
</li>
        <li class="alt">
                <span>heredoc&gt; - football </span>
</li>
        <li>
                <span>heredoc&gt; EOF </span>
</li>
        <li class="alt">
                 </li>
        <li>
                <span>➜ test cat glide.yaml </span>
</li>
        <li class="alt">
                <span><span class="keyword">name</span><span>: tom </span></span>
</li>
        <li>
                <span>age: 10 </span>
</li>
        <li class="alt">
                <span>hobby: </span>
</li>
        <li>
                <span>- football </span>
</li>
</ol>
<p>
        <strong>4、 单引号,双引号,没有引号的区别</strong></p>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span><span class="keyword">name</span><span>=</span><span class="string">"tom"</span><span> </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>f1(){ </span>
</li>
        <li>
                <span>echo "f1 hello world </span>
</li>
        <li class="alt">
                <span>my <span class="keyword">name</span><span> </span><span class="keyword">is</span><span> $</span><span class="keyword">name</span><span> </span></span>
</li>
        <li>
                <span>" </span>
</li>
        <li class="alt">
                <span>} </span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>f2(){ </span>
</li>
        <li>
                <span>echo 'f2 hello world </span>
</li>
        <li class="alt">
                <span>my <span class="keyword">name</span><span> </span><span class="keyword">is</span><span> $</span><span class="keyword">name</span><span> </span></span>
</li>
        <li>
                <span>' </span>
</li>
        <li class="alt">
                <span>} </span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>f3(){ </span>
</li>
        <li>
                <span>echo f3 hello world </span>
</li>
        <li class="alt">
                <span>my <span class="keyword">name</span><span> </span><span class="keyword">is</span><span> $</span><span class="keyword">name</span><span> </span></span>
</li>
        <li>
                <span>} </span>
</li>
        <li class="alt">
                 </li>
        <li>
                <span>f1 </span>
</li>
        <li class="alt">
                <span>f2 </span>
</li>
        <li>
                <span>f3 </span>
</li>
</ol>
<p>
        输出</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>➜ makefile git:(master) ✗ sh ./main.sh </span></span>
</li>
        <li>
                <span>f1 hello world </span>
</li>
        <li class="alt">
                <span>my <span class="keyword">name</span><span> </span><span class="keyword">is</span><span> tom </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>f2 hello world </span>
</li>
        <li>
                <span>my <span class="keyword">name</span><span> </span><span class="keyword">is</span><span> $</span><span class="keyword">name</span><span> </span></span>
</li>
        <li class="alt">
                 </li>
        <li>
                <span>f3 hello world </span>
</li>
        <li class="alt">
                <span>./main.sh: line 19: my: command <span class="op">not</span><span> found </span></span>
</li>
</ol>
<p>
        可以看到</p>
<ul>
<li>
                双引号会自动对变量赋值</li>
        <li>
                单引号不会对变量进行赋值等操作</li>
        <li>
                不加引号对于换行等功能无法实现!只能使用换行符</li>
</ul>
<ol class="dp-sql">
<li class="alt">
                <span><span>f3(){ </span></span>
</li>
        <li>
                <span>echo f3 hello world \ </span>
</li>
        <li class="alt">
                <span>my <span class="keyword">name</span><span> </span><span class="keyword">is</span><span> $</span><span class="keyword">name</span><span> </span></span>
</li>
        <li>
                <span>} </span>
</li>
</ol>
<p>
        <strong>5、特殊变量</strong></p>
<ul>
<li>
                $0: 当前脚本的文件名</li>
        <li>
                $n : 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。</li>
        <li>
                $#: 传递给脚本或函数的参数个数。</li>
        <li>
                $*: 传递给脚本或函数的所有参数。</li>
        <li>
                $@: 传递给脚本或函数的所有参数(推荐使用这个),当使用"" 双引号引用是$*会变成字符串而不是数组</li>
        <li>
                $?: 上个命令的退出状态,或函数的返回值。一般情况下,大部分命令执行成功后会返回 0,失败返回 1。</li>
        <li>
                $$: 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。</li>
</ul>
<p>
        <strong>6、[[]]和[]标准 以及基本语法规范</strong></p>
<p>
        具体规范:</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                <span><span class="keyword">name</span><span>=</span><span class="string">""</span><span> </span></span>
</li>
        <li class="alt">
                <span>if [[ -z $<span class="keyword">name</span><span> ]]; </span><span class="keyword">then</span><span> </span></span>
</li>
        <li>
                <span>echo <span class="string">"is zero"</span><span> </span></span>
</li>
        <li class="alt">
                <span>fi </span>
</li>
</ol>
<p>
        执行后发现</p>
<p>
        <img title="Shell日常使用的小技巧" alt="Shell日常使用的小技巧" border="0" src="https://zhuji.jb51.net/uploads/img/202305/3f640ae4d3133bd1d70726c0ad33ee01.jpg"></p>
<p>
        <strong>7、/bin/sh 与 /bin/bash 的区别</strong></p>
<p>
        /bin/sh 与 /bin/bash 的区别</p>
<h3>
        3、获取命令结果$(cmd)</h3>
<p>
        有两种写法,一种是$()这个并不是所有的shell都支持,但是比较直观, 另外一种是"``" (它可是适用更多的平台)</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li class="alt">
                <span>echo `ls -a /Users/fanhaodong/note` </span>
</li>
        <li class="alt">
                <span>echo $(ls -a /Users/fanhaodong/note) </span>
</li>
</ol>
<p>
        输出:</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>. .. .DS_Store 1714.jpg docker-rocketmq-cluster gridea-home hexo-home note pdf vuepress-starter </span></span>
</li>
        <li class="alt">
                <span>. .. .DS_Store 1714.jpg docker-rocketmq-cluster gridea-home hexo-home note pdf vuepress-starter </span>
</li>
</ol>
<h3>
        <strong>4、输入输出重定向2&gt;&amp;1</strong>
</h3>
<p>
        使用</p>
<p>
        程序中经常有,标准输出,但是还有错误输出,因此需要合并到一个流中</p>
<p>
        其实Go的程序中正执行脚本的时候可以指定,标准输出和错误输出</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>command := </span><span class="keyword">exec</span><span>.Command(shell, </span><span class="string">"-c"</span><span>, cmd) </span></span>
</li>
        <li>
                <span>command.Stdout = os.Stdout </span>
</li>
        <li class="alt">
                <span>command.Stderr = os.Stderr </span>
</li>
</ol>
<p>
        使用的时候:</p>
<ul>
<li>
                默认为标准输出重定向,与 1&gt; 相同</li>
        <li>
                2&gt;&amp;1 意思是把 标准错误输出 重定向到 标准输出.</li>
        <li>
                &amp;&gt;file 意思是把标准输出和标准错误输出 都重定向到文件file中</li>
</ul>
<p>
        例如:</p>
<ol class="dp-sql">
<li class="alt">
                <span><span>command &gt;</span><span class="keyword">out</span><span>.file 2&gt;&amp;1&amp; </span></span>
</li>
</ol>
<p>
        command &gt;out.file是将command的标准输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。2&gt;&amp;1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&amp;,是让该命令在后台执行。</p>
<h3>
        5、If语句</h3>
<p>
        if 其实就是test 命令</p>
<h3>
        1、格式</h3>
<p>
        <strong>1) 换行写</strong></p>
<ol class="dp-sql">
<li class="alt">
                <span><span>if [ condition ]; </span><span class="keyword">then</span><span> </span></span>
</li>
        <li>
                <span># body </span>
</li>
        <li class="alt">
                <span>elif [ condition ]; <span class="keyword">then</span><span> </span></span>
</li>
        <li>
                <span># body </span>
</li>
        <li class="alt">
                <span><span class="keyword">else</span><span> </span></span>
</li>
        <li>
                <span># body </span>
</li>
        <li class="alt">
                <span>fi </span>
</li>
</ol>
<p>
        <strong>2)非换行写</strong></p>
<ol class="dp-sql">
<li class="alt">
                <span><span>if [ -f </span><span class="string">"/Users/fanhaodong/note/note/Makefile1"</span><span> ]; </span><span class="keyword">then</span><span> echo 111 ; echo 222 ;elif [ -f </span><span class="string">"/Users/fanhaodong/note/note/README.md"</span><span> ]; </span><span class="keyword">then</span><span> echo 333 ; echo 4444 ; </span><span class="keyword">else</span><span> echo 555 ; echo 666 ; fi </span></span>
</li>
</ol>
<h3>
        2、结果获取/判断</h3>
<p>
        结果输出0 ,表示为真,可以通过$? 来获取结果</p>
<h3>
        3、例如调试条件</h3>
<ol class="dp-sql">
<li class="alt">
                <span><span>➜ note git:(master) ✗ test </span><span class="string">"abc"</span><span>!=</span><span class="string">"def"</span><span> </span></span>
</li>
        <li>
                <span>➜ note git:(master) ✗ echo $? </span>
</li>
        <li class="alt">
                <span>0 </span>
</li>
</ol>
<h3>
        4、测试文件是否存在</h3>
<ul>
<li>
                如果你要判断一个文件是否存在,只需要-e 即可,输出0 表示文件存在 (不在判断类型的时候推荐使用这个)</li>
        <li>
                如果你要判断一个文件是否为文件夹,并且判断是否存在,只需要-d 即可</li>
        <li>
                如果你要判断一个文件是否为常规文件 ,并且判断是否存在,只需要-f 即可</li>
        <li>
                -L filename 如果 filename为符号链接,则为真</li>
</ul>
<ol class="dp-sql">
<li class="alt">
                <span><span># ls -al </span></span>
</li>
        <li>
                <span>lrwxrwxrwx 1 root root 5 Mar 1 09:49 c.txt -&gt; a.txt </span>
</li>
        <li class="alt">
                <span># [ -L <span class="string">"./c.txt"</span><span> ] </span></span>
</li>
        <li>
                <span># echo $? </span>
</li>
        <li class="alt">
                <span>0 </span>
</li>
</ol>
<ul>
<li>
                -r filename 如果 filename可读,则为真</li>
        <li>
                -w filename 如果 filename可写,则为真</li>
        <li>
                -x filename 如果 filename可执行,则为真</li>
        <li>
                -s filename 如果文件长度不为0,则为真</li>
        <li>
                -h filename 如果文件是软链接,则为真</li>
</ul>
<ol class="dp-sql">
<li class="alt">
                <span><span>➜ note git:(master) ✗ [ -f </span><span class="string">"/Users/fanhaodong/note/note/Makefile"</span><span> ] </span></span>
</li>
        <li>
                <span>➜ note git:(master) ✗ echo $? </span>
</li>
        <li class="alt">
                <span>0 </span>
</li>
        <li>
                <span>➜ note git:(master) ✗ [ -f <span class="string">"/Users/fanhaodong/note/note/Makefile1"</span><span> ] </span></span>
</li>
        <li class="alt">
                <span>➜ note git:(master) ✗ echo $? </span>
</li>
        <li>
                <span>1 </span>
</li>
</ol>
<h3>
        5、字符串操作</h3>
<h4>
        字符串推荐加"" 进行定义</h4>
<p>
        <strong>1) 判断字符串是否为空-z (zero)么</strong></p>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>str=<span class="string">""</span><span> </span></span>
</li>
        <li>
                <span>if [ -z <span class="string">"${str}"</span><span> ]; </span><span class="keyword">then</span><span> </span></span>
</li>
        <li class="alt">
                <span>echo str <span class="keyword">is</span><span> empty </span></span>
</li>
        <li>
                <span>fi </span>
</li>
        <li class="alt">
                <span># str <span class="keyword">is</span><span> empty </span></span>
</li>
</ol>
<p>
        <strong>2)判断两个字符串是否相同</strong></p>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>str1=<span class="string">"str"</span><span> </span></span>
</li>
        <li>
                <span>str2=<span class="string">"str2"</span><span> </span></span>
</li>
        <li class="alt">
                 </li>
        <li>
                <span>if [ <span class="string">"$str1"</span><span> = </span><span class="string">"$str2"</span><span> ]; </span><span class="keyword">then</span><span> </span></span>
</li>
        <li class="alt">
                <span>echo str1 <span class="keyword">is</span><span> equal str2 </span></span>
</li>
        <li>
                <span><span class="keyword">else</span><span> </span></span>
</li>
        <li class="alt">
                <span>echo str1 <span class="keyword">is</span><span> </span><span class="op">not</span><span> equal str2 </span></span>
</li>
        <li>
                <span>fi </span>
</li>
        <li class="alt">
                 </li>
        <li>
                <span># str1 <span class="keyword">is</span><span> </span><span class="op">not</span><span> equal str2 </span></span>
</li>
</ol>
<h3>
        4、测试一个命令是否存在command -v $#</h3>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                <span>cmd=go </span>
</li>
        <li class="alt">
                <span>if [ `command -v $cmd` ]; <span class="keyword">then</span><span> </span></span>
</li>
        <li>
                <span>echo $cmd command <span class="keyword">is</span><span> exists </span></span>
</li>
        <li class="alt">
                <span><span class="keyword">else</span><span> </span></span>
</li>
        <li>
                <span>echo $cmd command <span class="op">not</span><span> exists </span></span>
</li>
        <li class="alt">
                <span>fi </span>
</li>
        <li>
                <span># go command <span class="keyword">is</span><span> exists </span></span>
</li>
</ol>
<h3>
        5、获取字符串长度${#var}</h3>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                <span>str=<span class="string">"hello "</span><span> </span></span>
</li>
        <li class="alt">
                <span>str1=hello </span>
</li>
        <li>
                <span>echo str 的长度是 ${#str} </span>
</li>
        <li class="alt">
                <span>echo str1 的长度是 ${#str1} </span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>#str 的长度是 8 </span>
</li>
        <li>
                <span>#str1 的长度是 5 </span>
</li>
</ol>
<h3>
        6、数字比较</h3>
<ul>
<li>
                -eq 等于</li>
        <li>
                -ne 不等于</li>
        <li>
                -gt 大于</li>
        <li>
                -ge 大于等于</li>
        <li>
                -lt 小于</li>
        <li>
                -le 小于等于</li>
</ul>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/sh </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>num1=10 </span>
</li>
        <li>
                <span>num2=20 </span>
</li>
        <li class="alt">
                <span>if (($num1 &lt;= $num2)); <span class="keyword">then</span><span> </span></span>
</li>
        <li>
                <span>echo num1 lesser equal num2 </span>
</li>
        <li class="alt">
                <span>fi </span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span>if [ $num1 -le $num2 ]; <span class="keyword">then</span><span> </span></span>
</li>
        <li>
                <span>echo num1 lesser equal num2 </span>
</li>
        <li class="alt">
                <span>fi </span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span># num1 lesser equal num2 </span>
</li>
        <li>
                <span># num1 lesser equal num2 </span>
</li>
</ol>
<h3>
        7、shell脚本中if判断'-a' - '-z'含义</h3>
<p>
        <img title="Shell日常使用的小技巧" alt="Shell日常使用的小技巧" border="0" src="https://zhuji.jb51.net/uploads/img/202305/a3ba85952ef7f4f34db7d4e3cc7fd792.jpg"></p>
<p>
        <img title="Shell日常使用的小技巧" alt="Shell日常使用的小技巧" border="0" src="https://zhuji.jb51.net/uploads/img/202305/4ba9bc601f4995a235d103595bc86aae.jpg"></p>
<p>
        <img title="Shell日常使用的小技巧" alt="Shell日常使用的小技巧" border="0" src="https://zhuji.jb51.net/uploads/img/202305/5875405b118a3153b67adfa4a7c0ac5e.jpg"></p>
<h3>
        6、for循环</h3>
<h4>
        1、forin; do;;done</h4>
<ol class="dp-sql">
<li class="alt">
                <span><span>#!/bin/bash </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span><span class="keyword">for</span><span> item </span><span class="op">in</span><span> {1..5}; do echo </span><span class="string">"$item"</span><span>; done </span></span>
</li>
        <li>
                 </li>
        <li class="alt">
                <span> /bin/bash <span class="string">"/Users/fanhaodong/note/note/Linux/shell/file.sh"</span><span> </span></span>
</li>
        <li>
                <span>1 </span>
</li>
        <li class="alt">
                <span>2 </span>
</li>
        <li>
                <span>3 </span>
</li>
        <li class="alt">
                <span>4 </span>
</li>
        <li>
                <span>5 </span>
</li>
</ol>
<h4>
        2、for((x=0; x&lt;10; x++));do;; done</h4>
<ol class="dp-sql">
<li class="alt">
                <span><span class="keyword">for</span><span>((x=0; x&lt;10; x++));do echo </span><span class="string">"$x"</span><span> ;done </span></span>
</li>
</ol>
<h3>
        7、awk</h3>
<h4>
        <strong>1、例子</strong>
</h4>
<p>
        <strong>demo</strong></p>
<ol class="dp-sql">
<li class="alt">
                <span><span># cat demo.txt </span></span>
</li>
        <li>
                <span>11 22 </span>
</li>
        <li class="alt">
                <span>111 </span>
</li>
        <li>
                <span>22 33 </span>
</li>
</ol>
<p>
        <strong>脚本</strong></p>
<ol class="dp-sql">
<li class="alt">
                <span><span># awk -F </span><span class="string">':'</span><span> </span><span class="string">'BEGIN {print "start"} /:/ {printf "do1 $1=%s $2=%s\n",$1,$2} {print "do2 .."} END {print "e nd"}'</span><span> demo.txt </span></span>
</li>
        <li>
                <span>start </span>
</li>
        <li class="alt">
                <span>do1 $1=11 $2=22 </span>
</li>
        <li>
                <span>do2 .. </span>
</li>
        <li class="alt">
                <span>do2 .. </span>
</li>
        <li>
                <span>do1 $1=22 $2=33 </span>
</li>
        <li class="alt">
                <span>do2 .. </span>
</li>
        <li>
                <span>e nd </span>
</li>
</ol>
<h4>
        <strong>2、格式</strong>
</h4>
<ol class="dp-sql">
<li class="alt">
                <span><span>awk -arg1 x1 -arg2 x2 </span><span class="string">'BEGIN {开始执行脚本} 条件 {过程1} {过程2} END{循环体执行完后最后执行}'</span><span> </span></span>
</li>
</ol>
<ol>
<li>
                其中条件执行正则表达式、判断等</li>
        <li>
                还支持一些内置函数 , 一些内置变量!</li>
        <li>
                过程中支持if函数</li>
</ol>
<h3>
        8、sed</h3>
<p>
        首先gun的sed函数和mac的set是有些不同的!具体看:</p>
<ul>
<li>
                https://superuser.com/questions/307165/newlines-in-sed-on-mac-os-x</li>
</ul>
<p>
        具体写在其他文档上,目前使用的多个命令也未分享!</p>
<p>
        原文地址:https://www.toutiao.com/a7041836020135887368/</p>
頁: [1]
查看完整版本: Shell日常使用的小技巧