Shell_note

1. VSCode: Windows 下配置 VSCode运行shell

shell-format

coderunner

https://www.cnblogs.com/yongdaimi/p/15247771.html

2. shell的使用

注释

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#aa5500"># 单行注释  #</span>
<span style="color:#aa5500"># 多行注释 EOF  亦可以换为 ' '或 ! !</span>
:<<EOF
需要注释的内容
EOF</span></span>

echo输出\read输入

<span style="background-color:#dadada"><span style="color:#1f0909">支持转义字符\
<span style="color:#3300aa">echo</span> string
read name                    <span style="color:#aa5500"># 读取输入的内容和传参数不一样, 此时等待用户输入, 并赋值给name</span>
printf <span style="color:#0000ff">$name</span>                 <span style="color:#aa5500"># 打印输入的参数name</span>
​
<span style="color:#3300aa">echo</span> <span style="color:#0000cc">-e</span> <span style="color:#aa1111">"Tom \n"</span>             <span style="color:#aa5500"># -e开启转义 \n执行  \n改为\c 表示不换行</span>
​
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"It is a test "</span> > <span style="color:#116644">123</span>.txt      <span style="color:#aa5500"># 显示结果定向至文件 即将结果写入文件123.txt</span>
​
<span style="color:#3300aa">echo</span> <span style="color:#009900">`test`</span>                   <span style="color:#aa5500"># 显示命令执行的结果</span></span></span>

printf

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#aa5500"># 基本语法</span>
printf format-string [arguement...]
​
<span style="color:#aa5500"># %s(字符串) %c(字符) %d(整型) %f(输出实数) 都是格式替代符,</span>
<span style="color:#aa5500"># %-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10 个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。</span>
<span style="color:#aa5500"># %-4.2f 指格式化为小数,其中 .2 指保留2位小数。</span>
​
printf <span style="color:#aa1111">"%-10s %-8s %-4s\n"</span> 姓名 性别 体重kg  
printf <span style="color:#aa1111">"%-10s %-8s %-4.2f\n"</span> 郭靖 男 <span style="color:#116644">66</span>.1234
printf <span style="color:#aa1111">"%-10s %-8s %-4.2f\n"</span> 杨过 男 <span style="color:#116644">48</span>.6543
printf <span style="color:#aa1111">"%-10s %-8s %-4.2f\n"</span> 郭芙 女 <span style="color:#116644">47</span>.9876
​
<span style="color:#aa5500"># printf中 的转义字符</span>
\a  警告字符,通常为ASCII的BEL字符
\b  后退
\c  抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f  换页(formfeed)
\n  换行
\r  回车(Carriage return)
\t  水平制表符
\v  垂直制表符
\\  一个字面上的反斜杠字符
\ddd    表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd   表示1到3位的八进制值字符</span></span>

test命令

Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

运算符参照 shell的基本运算符

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#aa5500"># 例子:</span>
<span style="color:#0000ff">num1</span><span style="color:#981a1a">=</span><span style="color:#116644">100</span>
<span style="color:#0000ff">num2</span><span style="color:#981a1a">=</span><span style="color:#116644">100</span>
<span style="color:#770088">if</span> test <span style="color:#0000ff">$[num1</span>] <span style="color:#0000cc">-eq</span> <span style="color:#0000ff">$[num2</span>]     <span style="color:#aa5500"># </span>
<span style="color:#770088">then</span>
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">'两个数相等!'</span>
<span style="color:#770088">else</span>
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">'两个数不相等!'</span>
<span style="color:#770088">fi</span>
​</span></span>

流程控制语句

if ....else if.....else.....

<span style="background-color:#dadada"><span style="color:#1f0909">if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi</span></span>
<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#aa5500"># if ....else if.....else.....</span>
<span style="color:#0000ff">a</span><span style="color:#981a1a">=</span><span style="color:#116644">10</span>
<span style="color:#0000ff">b</span><span style="color:#981a1a">=</span><span style="color:#116644">20</span>
<span style="color:#770088">if</span> [ <span style="color:#0000ff">$a</span> <span style="color:#981a1a">==</span> <span style="color:#0000ff">$b</span> ]
<span style="color:#770088">then</span>
   <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"a 等于 b"</span>
<span style="color:#770088">elif</span> [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-gt</span> <span style="color:#0000ff">$b</span> ]
<span style="color:#770088">then</span>
   <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"a 大于 b"</span>
<span style="color:#770088">elif</span> [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-lt</span> <span style="color:#0000ff">$b</span> ]
<span style="color:#770088">then</span>
   <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"a 小于 b"</span>
<span style="color:#770088">else</span>
   <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"没有符合的条件"</span>
<span style="color:#770088">fi</span></span></span>

for 循环

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#770088">for</span> var <span style="color:#770088">in</span> item1 item2 ... itemN; <span style="color:#770088">do</span> command1; command2… <span style="color:#770088">done</span>;</span></span>
<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#770088">for</span> loop <span style="color:#770088">in</span> <span style="color:#116644">1</span> <span style="color:#116644">2</span> <span style="color:#116644">3</span> <span style="color:#116644">4</span> <span style="color:#116644">5</span>
<span style="color:#770088">do</span>
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"The value is: </span><span style="color:#0000ff">$loop</span><span style="color:#aa1111">"</span>
<span style="color:#770088">done</span></span></span>

while语句

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#555555">#!/bin/bash</span>
<span style="color:#0000ff">int</span><span style="color:#981a1a">=</span><span style="color:#116644">1</span>
<span style="color:#770088">while</span>(( <span style="color:#0000ff">$int</span><<span style="color:#981a1a">=</span><span style="color:#116644">5</span> ))
<span style="color:#770088">do</span>
    <span style="color:#3300aa">echo</span> <span style="color:#0000ff">$int</span>
    let <span style="color:#aa1111">"int++"</span>
<span style="color:#770088">done</span></span></span>

无限循环

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#770088">while</span> :
<span style="color:#770088">do</span>
    command
<span style="color:#770088">done</span>
或
<span style="color:#770088">while</span> <span style="color:#221199">true</span>
<span style="color:#770088">do</span>
    command
<span style="color:#770088">done</span>
或
<span style="color:#770088">for</span> (( ; ; ))</span></span>

until循环,直到条件为true时结束,与while处理方式相反

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#770088">until</span> condition
<span style="color:#770088">do</span>
    command
<span style="color:#770088">done</span>
​
<span style="color:#aa5500">#例子</span>
<span style="color:#0000ff">a</span><span style="color:#981a1a">=</span><span style="color:#116644">0</span>
<span style="color:#aa5500"># 只有当a >=10时才会结束循环</span>
<span style="color:#770088">until</span> [ ! <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-lt</span> <span style="color:#116644">10</span> ]
<span style="color:#770088">do</span>
   <span style="color:#3300aa">echo</span> <span style="color:#0000ff">$a</span>
   <span style="color:#0000ff">a</span><span style="color:#981a1a">=</span><span style="color:#009900">`expr </span><span style="color:#0000ff">$a</span><span style="color:#009900"> + 1`</span>
<span style="color:#770088">done</span>
​
​</span></span>

case.....esac

case ... esac 为多选择语句,是一种多分支选择结构,

每个 case 分支用右圆括号开始,

用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。

可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

<span style="background-color:#dadada"><span style="color:#1f0909">case 值 <span style="color:#770088">in</span>
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
<span style="color:#770088">esac</span>
​
​
<span style="color:#aa5500"># 例子:</span>
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">'输入 1 到 4 之间的数字:'</span>
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">'你输入的数字为:'</span>
read aNum
case <span style="color:#0000ff">$aNum</span> <span style="color:#770088">in</span>
    <span style="color:#116644">1</span>)  <span style="color:#3300aa">echo</span> <span style="color:#aa1111">'你选择了 1'</span>
    ;;
    <span style="color:#116644">2</span>)  <span style="color:#3300aa">echo</span> <span style="color:#aa1111">'你选择了 2'</span>
    ;;
    <span style="color:#116644">3</span>)  <span style="color:#3300aa">echo</span> <span style="color:#aa1111">'你选择了 3'</span>
    ;;
    <span style="color:#116644">4</span>)  <span style="color:#3300aa">echo</span> <span style="color:#aa1111">'你选择了 4'</span>
    ;;
    *)  <span style="color:#3300aa">echo</span> <span style="color:#aa1111">'你没有输入 1 到 4 之间的数字'</span>
    ;;
<span style="color:#770088">esac</span></span></span>

break

continue

函数

<span style="background-color:#dadada"><span style="color:#1f0909">[ <span style="color:#770088">function</span> ] funname [()]
{
    action;
    [return int;]
}</span></span>

说明:

  • 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

  • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

<span style="background-color:#dadada"><span style="color:#1f0909">demoFun(){
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"这是我的第一个 shell 函数!"</span>
}
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"-----函数开始执行-----"</span>
demoFun
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"-----函数执行完毕-----"</span></span></span>
<span style="background-color:#dadada"><span style="color:#1f0909">funWithReturn(){
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"这个函数会对输入的两个数字进行相加运算..."</span>
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"输入第一个数字: "</span>
    read aNum
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"输入第二个数字: "</span>
    read anotherNum
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"两个数字分别为 </span><span style="color:#0000ff">$aNum</span><span style="color:#aa1111"> 和 </span><span style="color:#0000ff">$anotherNum</span><span style="color:#aa1111"> !"</span>
    return <span style="color:#009900">$((</span><span style="color:#0000ff">$aNum</span><span style="color:#009900">+</span><span style="color:#0000ff">$anotherNum</span><span style="color:#009900">))</span>
}
funWithReturn
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"输入的两个数字之和为 </span><span style="color:#0000ff">$?</span><span style="color:#aa1111"> !"</span></span></span>

函数传参的注意:

<span style="background-color:#dadada"><span style="color:#1f0909">-  当n>=10时,获取参数用${n},
-  还需注意特殊字符参考 __参数传递__</span></span>

输入\输出重定向

<span style="background-color:#dadada"><span style="color:#1f0909">命令  说明
command > file  将输出重定向到 file。
command < file  将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file        将文件描述符为 n 的文件重定向到 file。
n >> file       将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m          将输出文件 m 和 n 合并。
n <& m          将输入文件 m 和 n 合并。
<< tag          将开始标记 tag 和结束标记 tag 之间的内容作为输入。</span></span>

文件包括

shell可以包含外部脚本, 可以很方便的封装一些公共代码

<span style="background-color:#dadada"><span style="color:#1f0909">. filename
或
<span style="color:#3300aa">source</span> filename</span></span>
<span style="background-color:#dadada"><span style="color:#1f0909">​</span></span>

1. 变量

变量的类型: ( 局部, 环境, shell变量)

  1. 局部变量

    在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

  2. 环境变量

    所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

  3. shell变量

    shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

字符串

  1. 使用单引号, 内的任何字符都会原样输出, 其中变量无效, 不能出现单独额一个单引号,

    1. 双引号, 内部可以有变量,可以出现转义字符

    2. 亦可不用引号

字符串的一些方法

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#aa5500"># 声明变量(字母,下划线,数字,不能有关键字,首字母非数字,)</span>
<span style="color:#000000">name</span>=<span style="color:#aa1111">"Tom"</span>
<span style="color:#aa5500"># 声明变量只读属性</span>
<span style="color:#000000">readonly</span> <span style="color:#000000">name</span> 
<span style="color:#aa5500"># 变量重新赋值</span>
<span style="color:#000000">name</span>=<span style="color:#aa1111">"Jerry"</span>
<span style="color:#aa5500"># 删除变量</span>
<span style="color:#000000">unset</span> <span style="color:#000000">name</span>
<span style="color:#000000">echo</span> <span style="color:red">$</span>{<span style="color:#aa5500">#name}  # 输出name 的长度</span>
<span style="color:#000000">echo</span> <span style="color:red">$</span>{<span style="color:#000000">name</span>:<span style="color:#116644">1</span>:<span style="color:#116644">4</span>}  <span style="color:#aa5500"># 对name 进行切片</span>
<span style="color:#000000">echo</span> `<span style="color:#000000">expr</span> <span style="color:#000000">index</span> <span style="color:#aa1111">"${name}"</span> <span style="color:#000000">na</span>`  <span style="color:#aa5500"># 查找字符 n 和 a 的出现位置,谁先出现,就计算哪个</span></span></span>

数组

在shell中支支持一维数组,但不限定数组的大小

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#0000ff">array</span><span style="color:#981a1a">=</span>(1 <span style="color:#116644">2</span> <span style="color:#116644">3</span> <span style="color:#116644">4</span> <span style="color:#116644">5</span> <span style="color:#116644">6</span>)  <span style="color:#aa5500"># 定义数组 ,元素之间使用空格进行分割</span>
亦可
array[1]<span style="color:#981a1a">=</span><span style="color:#116644">6</span> <span style="color:#aa5500"># 给数值中的单个下标进行赋值,可以使用多个对数组进行赋值, 且下标的范围可以不连续,范围没限制</span>
<span style="color:#aa5500"># 读取数组</span>
​
<span style="color:#0000ff">item</span><span style="color:#981a1a">=</span><span style="color:#0000ff">${array[1]}</span>    <span style="color:#aa5500"># 取出数组中的单个元素</span>
​
<span style="color:#3300aa">echo</span> <span style="color:#0000ff">${array[@]}</span>    <span style="color:#aa5500"># 使用@符可以获取数组中的所有元素</span>
<span style="color:#3300aa">echo</span> <span style="color:#0000ff">${#array[@]}</span>  <span style="color:#0000ff">${#array[*]}</span>  <span style="color:#aa5500"># 两种方式都可以获取数组的长度</span>
<span style="color:#3300aa">echo</span> <span style="color:#0000ff">${#array[0]}</span>                <span style="color:#aa5500"># 获取数组单个元素的长度</span></span></span>

2 参数传递

向脚本传递参数

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#555555">#!/bin/bash</span>
<span style="color:#aa5500"># author:菜鸟教程</span>
<span style="color:#aa5500"># url:www.runoob.com</span>
​
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"Shell 传递参数实例!"</span>;
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"执行的文件名:</span><span style="color:#0000ff">$0</span><span style="color:#aa1111">"</span>;   <span style="color:#aa5500"># 文件名</span>
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"第一个参数为:</span><span style="color:#0000ff">$1</span><span style="color:#aa1111">"</span>;   <span style="color:#aa5500"># 以下是需要传递的参数</span>
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"第二个参数为:</span><span style="color:#0000ff">$2</span><span style="color:#aa1111">"</span>;
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"第三个参数为:</span><span style="color:#0000ff">$3</span><span style="color:#aa1111">"</span>;</span></span>

执行

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#0000ff">$ chmod</span> <span style="color:#981a1a">+</span>x test.sh 
<span style="color:#0000ff">$ </span>./test.sh <span style="color:#116644">1</span> <span style="color:#116644">2</span> <span style="color:#116644">3</span>       </span></span>

处理参数的特殊字符

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#0000ff">$#</span>  <span style="color:#aa5500"># 传递到脚本的参数个数</span>
<span style="color:#0000ff">$*</span>  <span style="color:#aa5500"># 以一个单字符串显示所有向脚本传递的参数</span>
    <span style="color:#aa5500"># 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。</span>
<span style="color:#0000ff">$$</span>  <span style="color:#aa5500"># 显示当前进程的ID号</span>
<span style="color:#0000ff">$!</span>  <span style="color:#aa5500"># 显示后台运行的最后一个进程的ID号</span>
<span style="color:#0000ff">$@</span>  <span style="color:#aa5500"># 与$* 类似,但是使用时加引号,并在引号中返回各个参数</span>
    <span style="color:#aa5500"># 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。</span>
<span style="color:#0000ff">$-</span>  <span style="color:#aa5500"># 显示Shell使用的当前选项,与set命令功能相同</span>
<span style="color:#0000ff">$?</span>  <span style="color:#aa5500"># 显示最后命令退出状态. 0 表示没有错误, 其他任何值表示有错误</span></span></span>

3. shell的基本运算符(注意间隔)

分为: 算数,关系,布尔,字符串,文件测试等运算符

原生的bash 不支持简单的数学运算,但可以通过其他命令实现,例如: awk,expr

  1. 算数运算符

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#0000ff">a</span><span style="color:#981a1a">=</span><span style="color:#116644">4</span>
<span style="color:#0000ff">b</span><span style="color:#981a1a">=</span><span style="color:#116644">6</span>
<span style="color:#0000ff">val</span><span style="color:#981a1a">=</span><span style="color:#009900">`expr </span><span style="color:#0000ff">${a}</span><span style="color:#009900"> + </span><span style="color:#0000ff">${b}</span><span style="color:#009900">`</span>  <span style="color:#aa5500"># 注意此处时``反引号,并且注意之间的空格</span>
<span style="color:#3300aa">echo</span> <span style="color:#aa1111">"result: </span><span style="color:#0000ff">${val}</span><span style="color:#aa1111">"</span></span></span>
<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#981a1a">+</span>   加法  <span style="color:#009900">`expr </span><span style="color:#0000ff">$a</span><span style="color:#009900"> + </span><span style="color:#0000ff">$b</span><span style="color:#009900">`</span> 结果为 <span style="color:#116644">30</span>。
<span style="color:#0000cc">-</span>   减法  <span style="color:#009900">`expr </span><span style="color:#0000ff">$a</span><span style="color:#009900"> - </span><span style="color:#0000ff">$b</span><span style="color:#009900">`</span> 结果为 <span style="color:#0000cc">-10</span>。
*   乘法  <span style="color:#009900">`expr </span><span style="color:#0000ff">$a</span><span style="color:#009900"> \* </span><span style="color:#0000ff">$b</span><span style="color:#009900">`</span> 结果为  <span style="color:#116644">200</span>。   <span style="color:#aa5500"># 注意\</span>
/   除法  <span style="color:#009900">`expr </span><span style="color:#0000ff">$b</span><span style="color:#009900"> / </span><span style="color:#0000ff">$a</span><span style="color:#009900">`</span> 结果为 <span style="color:#116644">2</span>。
%   取余  <span style="color:#009900">`expr </span><span style="color:#0000ff">$b</span><span style="color:#009900"> % </span><span style="color:#0000ff">$a</span><span style="color:#009900">`</span> 结果为 <span style="color:#116644">0</span>。
<span style="color:#981a1a">=</span>   赋值  <span style="color:#0000ff">a</span><span style="color:#981a1a">=</span><span style="color:#0000ff">$b</span> 把变量 b 的值赋给 a。
<span style="color:#981a1a">==</span>  相等。用于比较两个数字,相同则返回 <span style="color:#221199">true</span>。      [ <span style="color:#0000ff">$a</span> <span style="color:#981a1a">==</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">false</span>。
!<span style="color:#981a1a">=</span>  不相等。用于比较两个数字,不相同则返回 <span style="color:#221199">true</span>。   [ <span style="color:#0000ff">$a</span> !<span style="color:#981a1a">=</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">true</span>。</span></span>
  1. 关系运算符

<span style="background-color:#dadada"><span style="color:#1f0909">: <span style="color:#221199">true</span>。 [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-ne</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-gt</span> 检测>,如果是,则返回 <span style="color:#221199">true</span>。   [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-gt</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-lt</span> 检测>,如果是,则返回 <span style="color:#221199">true</span>。   [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-lt</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-ge</span> 检测><span style="color:#981a1a">=</span>,如果是,则返回 <span style="color:#221199">true</span>。  [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-ge</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-le</span> 检测<<span style="color:#981a1a">=</span>,如果是,则返回 <span style="color:#221199">true</span>。  [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-le</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-eq</span> 检测<span style="color:#981a1a">==</span> </span></span>

  1. 布尔运算符

<span style="background-color:#dadada"><span style="color:#1f0909">!   非运算,表达式为 <span style="color:#221199">true</span> 则返回 <span style="color:#221199">false</span>,否则返回 <span style="color:#221199">true</span>。 [ ! <span style="color:#221199">false</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-o</span>  或运算,有一个表达式为 <span style="color:#221199">true</span> 则返回 <span style="color:#221199">true</span>。          [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-lt</span> <span style="color:#116644">20</span> <span style="color:#0000cc">-o</span> <span style="color:#0000ff">$b</span> <span style="color:#0000cc">-gt</span> <span style="color:#116644">100</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-a</span>  与运算,两个表达式都为 <span style="color:#221199">true</span> 才返回 <span style="color:#221199">true</span>。          [ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-lt</span> <span style="color:#116644">20</span> <span style="color:#0000cc">-a</span> <span style="color:#0000ff">$b</span> <span style="color:#0000cc">-gt</span> <span style="color:#116644">100</span> ] 返回 <span style="color:#221199">false</span>。</span></span>
  1. 逻辑运算符

<span style="background-color:#dadada"><span style="color:#1f0909">&&  逻辑的 AND     [[ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-lt</span> <span style="color:#116644">100</span> && <span style="color:#0000ff">$b</span> <span style="color:#0000cc">-gt</span> <span style="color:#116644">100</span> ]] 返回 <span style="color:#221199">false</span>
||  逻辑的 OR      [[ <span style="color:#0000ff">$a</span> <span style="color:#0000cc">-lt</span> <span style="color:#116644">100</span> || <span style="color:#0000ff">$b</span> <span style="color:#0000cc">-gt</span> <span style="color:#116644">100</span> ]] 返回 <span style="color:#221199">true</span></span></span>
  1. 字符串运算符

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#981a1a">=</span>   检测两个字符串是否相等,相等返回 <span style="color:#221199">true</span>。          [ <span style="color:#0000ff">$a</span> <span style="color:#981a1a">=</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">false</span>。
!<span style="color:#981a1a">=</span>  检测两个字符串是否不相等,不相等返回 <span style="color:#221199">true</span>。       [ <span style="color:#0000ff">$a</span> !<span style="color:#981a1a">=</span> <span style="color:#0000ff">$b</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-z</span>  检测字符串长度是否为0,为0返回 <span style="color:#221199">true</span>。            [ <span style="color:#0000cc">-z</span> <span style="color:#0000ff">$a</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-n</span>  检测字符串长度是否不为 <span style="color:#116644">0</span>,不为 <span style="color:#116644">0</span> 返回 <span style="color:#221199">true</span>。     [ <span style="color:#0000cc">-n</span> <span style="color:#aa1111">"</span><span style="color:#0000ff">$a</span><span style="color:#aa1111">"</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000ff">$   </span>检测字符串是否为空,不为空返回 <span style="color:#221199">true</span>。            [ <span style="color:#0000ff">$a</span> ] 返回 <span style="color:#221199">true</span>。</span></span>
  1. 文件测试运算符

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#0000cc">-b</span> file 检测文件是否是块设备文件,如果是,则返回 <span style="color:#221199">true</span>。       [ <span style="color:#0000cc">-b</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-c</span> file 检测文件是否是字符设备文件,如果是,则返回 <span style="color:#221199">true</span>。     [ <span style="color:#0000cc">-c</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-d</span> file 检测文件是否是目录,如果是,则返回 <span style="color:#221199">true</span>。            [ <span style="color:#0000cc">-d</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-f</span> file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 <span style="color:#221199">true</span>。    [ <span style="color:#0000cc">-f</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-g</span> file 检测文件是否设置了 SGID 位,如果是,则返回 <span style="color:#221199">true</span>。    [ <span style="color:#0000cc">-g</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-k</span> file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 <span style="color:#221199">true</span>。  [ <span style="color:#0000cc">-k</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-p</span> file 检测文件是否是有名管道,如果是,则返回 <span style="color:#221199">true</span>。        [ <span style="color:#0000cc">-p</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-u</span> file 检测文件是否设置了 SUID 位,如果是,则返回 <span style="color:#221199">true</span>。    [ <span style="color:#0000cc">-u</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">false</span>。
<span style="color:#0000cc">-r</span> file 检测文件是否可读,如果是,则返回 <span style="color:#221199">true</span>。             [ <span style="color:#0000cc">-r</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-w</span> file 检测文件是否可写,如果是,则返回 <span style="color:#221199">true</span>。             [ <span style="color:#0000cc">-w</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-x</span> file 检测文件是否可执行,如果是,则返回 <span style="color:#221199">true</span>。            [ <span style="color:#0000cc">-x</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-s</span> file 检测文件是否为空(文件大小是否大于0),不为空返回 <span style="color:#221199">true</span>。[ <span style="color:#0000cc">-s</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">true</span>。
<span style="color:#0000cc">-e</span> file 检测文件(包括目录)是否存在,如果是,则返回 <span style="color:#221199">true</span>。    [ <span style="color:#0000cc">-e</span> <span style="color:#0000ff">$file</span> ] 返回 <span style="color:#221199">true</span>。</span></span>

其他检查符:

  • -S: 判断某文件是否 socket。

  • -L: 检测文件是否存在并且是一个符号链接。

执行shell脚本

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#aa5500"># 执行shell脚本</span>
<span style="color:#000000">sh</span> <span style="color:#000000">name</span>.<span style="color:#000000">sh</span>
.<span style="color:#981a1a">/</span><span style="color:#000000">name</span>.<span style="color:#000000">sh</span>
​
<span style="color:#aa5500"># 查看$PATH变量</span>
<span style="color:#000000">echo</span> <span style="color:red">$</span><span style="color:#000000">PATH</span>
<span style="color:#aa5500"># 临时修PATH变量的内容</span>
<span style="color:#000000">PATH</span>=<span style="color:red">$</span><span style="color:#000000">PATH</span>:<span style="color:#981a1a">/</span><span style="color:#000000">New</span><span style="color:#981a1a">/</span><span style="color:#000000">path</span>
<span style="color:#aa5500"># </span>
<span style="color:#000000">echo</span> <span style="color:red">$</span><span style="color:#000000">PATH</span>
​
<span style="color:#aa5500"># 允许后台运行脚本, 脚本退出后,进程随之终止</span>
.<span style="color:#981a1a">/</span><span style="color:#000000">name</span>.<span style="color:#000000">sh</span> <span style="color:#981a1a">&</span>
<span style="color:#aa5500"># 为保证脚本一直运行下去, 脚本的标准输出和标准错误会重定向大奥nothup.out文件里</span>
<span style="color:#000000">nohup</span> .<span style="color:#981a1a">/</span><span style="color:#000000">name</span>.<span style="color:#000000">sh</span> <span style="color:#981a1a">&</span> 
<span style="color:#aa5500"># 可以使用jobs命令查看后台运行的进程</span>
​</span></span>

linux中的文本流

linux的每个进程启动时,会打开三个文本流的端口: 标准输入, 标准输出, 标准错误

输出重定向

特殊情况下,需要保存程序的输出,此时可以通过输出重定向,将进程的输出保存到文件中

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#aa5500"># 将标准输出定向到文件中, 覆盖文件内容</span>
<span style="color:#000000">ls</span> <span style="color:#981a1a">></span> <span style="color:#000000">dir_log</span>
<span style="color:#aa5500"># 追加到文件中</span>
<span style="color:#000000">ls</span> <span style="color:#981a1a">>></span> <span style="color:#000000">dir_log</span>
<span style="color:#aa5500"># 执行完毕后, 可以通过cat dir_log 查看保存的文件内容</span></span></span>

管道

需要将一个命令的输出连到另一个命令的输入,如果重定向实现会比较复杂

管道(|)就像水管一样,可以连接两个命令的输入和输出, 甚至串联多个命令

格式: command1 | command2 | command3

管道是进程之间通信(IPC)的一种方式

shell例子

  1. 判断一个进程是否存在

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#555555">#!/bin/bash</span>
<span style="color:#aa5500"># 判断一个程序是否存在</span>
read <span style="color:#0000cc">-p</span> <span style="color:#aa1111">"请输入进程名: "</span> p
pgrep <span style="color:#0000ff">$p</span> &>/ect/zhy
<span style="color:#770088">if</span> [ <span style="color:#0000ff">$?</span> <span style="color:#0000cc">-ne</span> <span style="color:#116644">0</span> ];then
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"进程不存在"</span>
<span style="color:#770088">else</span>
    <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"进程存在"</span>
<span style="color:#770088">fi</span>
​
<span style="color:#aa5500"># 或者</span>
test <span style="color:#0000ff">$?</span> <span style="color:#0000cc">-eq</span> <span style="color:#116644">0</span> && <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"进程不存在"</span> || <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"进程存在"</span></span></span>
  1. 测试一个服务是否正常

<span style="background-color:#dadada"><span style="color:#1f0909"><span style="color:#555555">#!/bin/bash</span>
​
read <span style="color:#0000cc">-p</span> <span style="color:#aa1111">"请输入: "</span> web
<span style="color:#aa5500"># 请求web 并将结果 放在/home/zhy/下面</span>
<span style="color:#3300aa">wget</span> <span style="color:#0000cc">-P</span> /home/zhy/ <span style="color:#0000ff">$web</span> 
​
[ <span style="color:#0000ff">$?</span> <span style="color:#0000cc">-eq</span> <span style="color:#116644">0</span> ] && <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"正常"</span> && <span style="color:#3300aa">rm</span> <span style="color:#0000cc">-f</span> /home/zhy/index.* || <span style="color:#3300aa">echo</span> <span style="color:#aa1111">"异常"</span></span></span>
  1. 判断一个用户是否存在

<span style="background-color:#dadada"><span style="color:#1f0909">read <span style="color:#0000cc">-p</span> <span style="color:#aa1111">"用户名: "</span> username
id <span style="color:#0000ff">$username</span></span></span>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值