精华内容
下载资源
问答
  • 代码如下:sed ‘/^$/d’ filename #删除空行sed ‘s/ //g’ filenamesed ‘s/[[:space:]]//g’ filename4.删除#后的注释。 代码如下:sed -i ‘s/#.*$//g’ filename5.踢出登录的用户,用who查看终端
  • xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行...1. 当你尝试用rm 删除太多的文件,你可能得到一个错误信息:/bin/rm Argument list
  • 主要介绍了简化shell终端命令输入的脚本式快捷键工具,这是一个shell脚本写的简化shell命令输入的快捷键工具,需要的朋友可以参考下
  • Shell 脚本常用命令

    万次阅读 多人点赞 2019-07-31 19:32:50
    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook。在工作过程中整理了一下,贴在这里已备查看。 1 Shell中的特殊符号 1.1 $ 美元符号。用来表示变量的值。如变量...

    Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook。在工作过程中整理了一下,贴在这里已备查看。

     

    1           Shell中的特殊符号

    1.1           $  美元符号。用来表示变量的值。如变量NAME的值为Mike,则使用$NAME就可以得到“Mike”这个值。

    1.2          #  井号。除了做为超级用户的提示符之外,还可以在脚本中做为注释的开头字母,每一行语句中,从#号开始的部分就不执行了。

    1.3           “”  双引号。shell不会将一对双引号之间的文本中的大多数特殊字符进行解释,如#不再是注释的开头,它只表示一个井号“#”。但$仍然保持特殊含义。(在双引号中的$加变量名,即:$PARAM_NAME,依然会转换成变量的值。)

    1.3.1     双引号对于某些特殊符号是不起作用的, 例如:”,$,\,`(反引号)

    1.3.2     双引号和单引号不能嵌套。即:echo ‘””’  输出””,  echo “’’” 输出’’

    1.4           ‘’  单引号。shell不会将一对单引号之间的任何字符做特殊解释。(在双引号中的$加变量名,即:$PARAM_NAME,不会转换成变量的值。)

    1.4.1     echo “$HOME”    (结果:/home/xiongguoan)

    1.5          ``  倒引号。命令替换。在倒引号内部的shell命令首先被执行,其结果输出代替用倒引号括起来的文本,不过特殊字符会被shell解释。

    1.5.1     echo ‘$HOME’    (结果:$HOME)

    1.6          \  斜杠。用来去掉在shell解释中字符的特殊含义。在文本中,跟在\后面的一个字符不会被shell特殊解释,但其余的不受影响。

    1.7          []中括号, 主要是用来测试条件的,通常放在if语句的后面。 (不过还是不太明白),但是中括号本身不会在测试语句执行后消失。

    1.7.1     echo [$HOME]   (结果:出现错误)

    1.7.2     echo [$HOME ]   (结果:[/home/xiongguoan ]) (注意:HOME后面有空格哦。)

    1.7.3     echo [$HOME –eq ‘/xiong’]  (结果:[/home/xiongguoan –eq /xiong])

     

    1.8          {}大括号,主要是和$符号配合,作为字符串连接来使用

    1.8.1     echo ${HOME}ismydir   (结果:/home/xiongguoanismydir)

     

    2           预定义的变量

    2.1          特殊变量

     

    $      shell变量名的开始,如$var

    |      管道,将标准输出转到下一个命令的标准输入

    $#     记录传递给Shell的自变量个数

    #      注释开始

    &      在后台执行一个进程

    ?     匹配一个字符

    *      匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.)

    $-     使用set及执行时传递给shell的标志位

    $!     最后一个子进程的进程号 

    $?     取最近一次命令执行后的退出状态(返回码)

    $*     传递给shell script的参数

    $@     所有参数,个别的用双引号括起来

    $0     当前shell的名字

    $n     (n:1-) 位置参数

    $$     进程标识号(Process Identifier Number, PID)

    >      输出重定向

      <      输入重定向

      >>      输出重定向(追加方式)

      []     列出字符变化范围,如[a-z]

     

     

    2.2          代值变量

     

    * 任意字符串 

    ? 一个任意字符 

    [abc] a, b, c三者中之一 

    [a-n] 从a到n的任一字符 

     

     

    2.3          特殊字符的表达

     

    \b 退回  
    \c 打印一行时没有换行符 这个我们经常会用到  
    \f 换页  
    \r 回车  
    \t 制表  
    \v 垂直制表  
    \\ 反斜线本身 

     

    2.4          其他字符

    2.4.1     分号

    ; 表示一行结束

    2.4.2     圆括号

    () 表示在新的子shell中执行括号内的命令(这样可以不改变当前shell的状态。)

    但是圆括号在单/双引号内失去作用,只作为普通字符。

    2.4.3     花括号

    2.4.3.1    分割命令的用法

    与圆括号相似,但是:1. 花括号内的命令在当前shell中执行;2.花括号必须作为命令的第一个字符出现。

    2.4.3.2    引用变量的用法

    在$后面,表示变量名的开始和结束

     

    2.4.4     方括号

    相当与test命令,用来执行测试条件,通常用在需要判断条件的语句后面,例如:if,while等等。

     

     

    3           设置变量

    3.1          格式:VARNAME=value (i.e. PARAM=’hello’)

    3.2          注意:

    3.2.1     等号的前后不能有空格

    3.2.2     如果变量的值是一个命令的执行结果,请加上反引号(`)。

     

    4           引用变量

    4.1          $VARNAME

    4.1.1     e.i.  echo $HOME   (结果:/home/xiongguoan)

    4.2          变量默认值

    4.2.1     在引用一个变量的时候可以设定默认值。如果在此之前,该变量已经设定了值,则此默认值无效。如果此时变量没有被设定值,则使用此默认值(但是没有改变此变量的值)。

    4.2.2     echo Hello ${UNAME:-there}     #其中there是UNAME的默认值

    4.2.3     其他关于默认值与判读变量的方法:

     

    利用大括号表示变量替换

    表示形式

    说明

    ${VARIABLE}

    基本变量替换。大括号限定变量名的开始和结束

    ${VARIABLE:-DEFAULT}

    如果VARIABLE没有值,则这种表示形式返回DEFAULT的值

    ${VARIABLE:=DEFAULT}

    如果VARIABLE没有值,则这种表达形式返回DEFAULT的值。另外,如果VARIABLE没有设置,则把DEFAULT的值赋予它

    ${VARIABLE:+VALUE}

    如果VARIABLE被设置,则这种表示形式返回VALUE;否则,返回一个空串

    ${# VARIABLE}

    这种表示形式返回VARIABLE值的长度,除非VARIABLE是* 或者@在为*或者@的特殊情况下,则返回$@所表示的元素的个数。要记住,$ @保存传给该脚本的参数清单

    ${VARIABLE:?MESSAGE}

    如果VARIABLE没有值,则这种表示形式返回MESSAGE的值。Shell也显示出VARIABLE的名字,所以这种形式对捕获得错误很有用

     

     

    4.2.4     注意:

    4.2.4.1    使用${VALIABLE:?MESSAGE},如果发现此变量此时没有值,则脚本停止运行并显示行号和变量名称。 主要用于调试。

    4.2.4.2     

     

    5           位置变量

    5.1          使用$1,$2,$3…$9,${10},${11}…来代表输入的参数。其中$0代表被执行的命令或者脚本的名字。$1,$2…代表输入的第1,2…个参数

    5.2          例子:

    # cat count.sh#!/bin/sh

    A=$1             # 将位置$1的数值读入,并赋给变量A

    B=$2             # 将位置$2的数值读入,并赋给变量B

    C=$[$A+$B]       # 将变量A与B的值相加,将结果赋给C

    echo $C          # 显示C的数值

     

    结果:

    # ./count.sh  3  6

    9

    # ./count.sh 34  28

    62

    5.3          $@和$*代表参数的列表,$#代表参数的数量 (不知道$@和$*之间的差别)

     

     

    6           运算符和优先级

     

    Shell运算符和它们的优先级顺序

    级别

    运算符

    说明

    13

    -, +

    单目负、单目正

    12

    !, ~

    逻辑非、按位取反或补码

    11

    * , / , %

    乘、除、取模

    10

    +, -

    加、减

    9

    << , >>

    按位左移、按位右移

    8

    < =, > =,  < , >

    小于或等于、大于或等于、小于、大于

    7

    = = , ! =

    等于、不等于

    6

    &

    按位与

    5

    ^

    按位异或

    4

     |

    按位或

    3

    &&

    逻辑与

    2

    | |

    逻辑或

    1

    =, + =, - =, * =, /=, % =, & =, ^ =, | =, << =, >> =

    赋值、运算且赋值

     

     

     

    7           source / export / let / unset

    7.1          source

    7.1.1     正常情况下,脚本中执行的参数设置只能影响到shell脚本本身的执行环境,不能影响到调用此shell的脚本。

    7.1.2     使用source命令执行脚本,可以让脚本影响到父shell的环境(即调用此shell的当前shell)。

    7.1.3     例如:source env.sh

    7.2          export

    7.2.1     在bash下,使用export建立环境变量后,会影响到子shell脚本和当前shell的环境变量

    7.3          unset

    7.3.1     删除环境变量

    7.3.2     i.e.

    #export newval=1

    #echo $newval

    1

    #unset newval

    #echo $newval

        (ß此处为空行,newval已经被删除)

    7.4          let

    7.4.1     在bash中只用此命令可以建立一个临时的变量,此变量不会影响到子shell

     

    8            逻辑判断

    8.1          if

    8.1.1     单格式与嵌套

     

    if 条件表达式  
    then #当条件为真时执行以下语句  
    命令列表  
    else #为假时执行以下语句  
    命令列表  
    fi

     

    if 语句也可以嵌套使用  

    if 条件表达式1  
    then  
    if 条件表达式2  
    then  
    命令列表  
    else  
    if 条件表达式3  
    then  
    命令列表  
    else  
    命令列表  
    fi  
    fi  
    else  
    命令列表  
    fi 

     

    8.1.2     多分支格式

     

    if test -f "$1"  
    then  
    lpr $1  
    elif test -d "$1" #elif 同else if  
    then  
    (cd $1;lpr $1)  
    else  
    echo "$1不是文件或目录"  
    fi

     

    8.2          case

    8.2.1     格式

    case $newval in

    1)          #这里是可能值1

    echo 1

    ;;      #表示第一个分支结束

    2)           #这里是可能值 2

    echo 2

    ;;      #第二个分支结束

    *)      #表示其他可能值,必须在最后,否则他后面的语句无法执行

    echo unkown

    esac    #case 语句结束

    8.2.2      

    8.3          while /until

    8.3.1     格式

    while 表达式

    do

    命令列表

    done

     

    8.3.2     例如:

    Sum=0  
    i=0  
    while true #true是系统的关键词 表示真  
    do  
    i=`expr $i + 1`  
    Sum=`expr $Sum + $i`  
    if [ $i = "100" ]  
    then  
    break;  
    fi  
    done  
    echo $i $Sum  
    最后这个程序显示的是 100 5050 

     

    下面将这个程序再改动一下  


    Sum=0  
    i=0  
    while [ $i != "100" ]  
    do  
    i=`expr $i + 1`  
    Sum=`expr $Sum + $i`  
    done  
    echo $i $Sum  

    改动后的程序运算结果和上面是一样 但程序比上面的要简练  

    在这个循环中还可以以until做为测试条件 它正好与while测试的条件相反,也就是当条件为假时将继续执行循环体内的语句,否则就退出循环体,下面还用这个例子.  


    Sum=0  
    i=0  
    until [ $i = "100" ]  
    do  
    i=`expr $i + 1`  
    Sum=`expr $Sum + $i`  
    done  
    echo $i $Sum  
    当i不等于100时循环 就是当条件为假时循环,否则就退出,而第一个例子是当i不等于100  
    时循环,也就是测试条件为真时循环. 

     

    8.4          for

    8.4.1     枚举用法

    8.4.1.1    格式

     

     

    for 变量 in 名字列表  
    do  
    命令列表  
    done 

     

    8.4.1.2    格式

    for n in {1..10}

    do

    echo $n

    done

     

    for letter in a b c d e;

    do

    echo $letter

    done

     

     

    8.4.2     文件用法

     

    8.4.2.1    格式

    for file in *

    do

           echo $file

    done

     

    8.4.2.2    例子

     

    for File in a1 a2 a3 a4 a5  
    do  
    diff aa/$File bb/$File  
    done 

     

     

    8.4.3     累加格式

    for (( i=1;$i<10;i++))

    do

    echo $i

    done

     

    for(( i=1;$i<10;i=$[$i+1’ ])

    do

    echo $i

    done

    8.4.4      

    8.5          其他循环控制语句

    break 命令不执行当前循环体内break下面的语句从当前循环退出.  
    continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行.

     

    8.6          逻辑判断的表达

     

    一、判断文件的属性  

    格式:-操作符 filename  
    -e 文件存在返回1, 否则返回0  
    -r 文件可读返回1,否则返回0  
    -w 文件可写返回1,否则返回0  
    -x 文件可执行返回1,否则返回0  
    -o 文件属于用户本人返回1, 否则返回0  
    -z 文件长度为0返回1, 否则返回0.  
    -f 文件为普通文件返回1, 否则返回0  
    -d 文件为目录文件时返回1, 否则返回0  

    二、测试字符串  
    字符串1 = 字符串2 当两个字串相等时为真  
    字符串1 != 字符串2 当两个字串不等时为真  
    -n 字符串      当字符串的长度大于0时为真  
    -z 字符串      当字符串的长度为0时为真  
    字符串       当串字符串为非空时为真  

    三、测试两个整数关系  
    数字1 -eq 数字2     两数相等为真  
    数字1 -ne 数字2     两数不等为真  
    数字1 -gt 数字2     数字1大于数字2为真  
    数字1 -ge 数字2     数字1大于等于数字2为真  
    数字1 -lt 数字2     数字1小于数字2为真  
    数字1 -le 数字2     数字1小于等于数字2为真  

    四、逻辑测试  
    -a         与  
    -o        或  
    !        非 

     

    9           shell中的表达式

    9.1          shell 输出重定向

    9.1.1     管道  |

    就管道符前的命令的输出作为管道符后的命令的输入。

     

    ls | grep ‘.txt’

    将ls的输出作为grep 的输入。 grep从输入中找出所有包含.txt的行。

     

    9.1.2     输出  >

    将右尖括号前的命令的输入重定向到尖括号后的文件中。

     

    例如:

    ls *.sh > list.txt

    将当前目录下所有末尾名为sh的文件的列表写入到list.txt

     

    9.1.3     输入 <

    将左箭头后面的文件作为左箭头前的命令的输入。

    例如:

    grep “a” < test.sh

    将test.sh中找到所有包含a的行

     

    9.1.4     错误输出重定向

    默认bash有3个标准输入输出设备。

    0 标准输入

    1 标准输出

    2错误输出

     

    如果执行脚本的时候发生错误,会输出到2上。

    要想就将错误的输出也输出在标准输出上,需要重定向。

    例如:

    ./test.sh > a.log 2>&1

    后面2>&1就是将标准错误的输出重定向到标准输出上。

     

    9.2          tee

    9.2.1     将此命令的输入分叉,一支输出到屏幕一支可以重定向到其他位置。

    例如: ./test.sh | tee >a.txt 2>&1

    运行test.sh,通过tee输出到a.txt,同时屏幕上可以看到输出。并且将错误输出重定向到标准输出( 2>&1 )

    9.3          cpio

    9.3.1     文件或目录打包

    9.3.1.1    含子目录打包

      find . -name '*.sh' | cpio -o > shell.cpio

      将当前目录及其子目录下的sh文件打包成一个文件库为shell.cpio。 

    9.3.1.2    不含子目录的打包

    ls *.sh | cpio -o > shell.cpio

      将当前目录下的sh文件(不含子目录)打包成一个文件库为shell.cpio。 

    9.3.2      压缩

    文件打包完成后,即可用Unix中的compress命令(/usr/bin下)压缩打包文件。对一般的文本文件,压缩率较高,可达81%。

    例如:compress shell.cpio则将文件库压缩为shell.cpio.Z(自动添加.Z并删除shell.cpio )。 

    9.3.3      解压

    uncompress shell.cpio.Z则自动还原为shell.cpio。 

    9.3.4      解包展开

    将按原目录结构解包展开到当前所在目录下。若以相对路径打包的,当解包展开时,也是以相对路径存放展开的文件数据;若以绝对路径打包的,当解包展开时,也是以绝对路径存放展开的文件数据。因此注意若为相对路径,应先进入相应的目录下再展开。 

     

     cd /u1

     cpio –id < shell.cpio 解压到当期目录。 

     cpio –iud < shell.cpio则文件若存在将被覆盖,即强制覆盖。 

     cpio –id < shell.cpio env.sh 解压缩env.sh

    9.3.5      显示包内的文件

      cpio –it < shell.cpio  

     

    9.4          exec

    9.4.1     将此命令后的参数作为命令在当前的shell中执行,当前的shell或者脚本不在执行。

    例如: exec ls

    当前进程替换为ls,执行结束后就退出了。

    例如:在a.sh 中包含

    exec b.sh 则当a.sh 执行到此句后,被b.sh替换,a.sh中此句后的语句不会再被执行。

     

    9.5          fork

    9.5.1     将此命令的参数,新建一个进程来执行

     

    例如:在a.sh 中包含

    fork b.sh 则当a.sh 执行到此句后,被b.sh替换,a.sh中此句后的语句继续执行。b.sh在新的进程中同时执行。

     

    9.6          expr

    9.6.1     expr argument operator argument

    9.6.2     一般用于整数的运算。 例如:

    #set newval=1

    #echo $newval

    1

    #set newval=`expr $newval + 1`

    #echo $newval

    2

    #set newval=$newval+1

    #echo $newval

    2+1

     

    9.7          test

    9.7.1     测试,通常用在需要判断的语句后面,例如:if,while,等等。

    9.7.2     很多时候可以和中括号[]互换,我不知道区别是什么。

    9.7.3     例子:

    i=1

    if test”$ i” == “1”

    then

    echo true

    else

    echo false

    fi

     

    9.8          exit

    退出当前的shell,执行结果可以在shell中用$?查看

    例如:exit 2

    9.9          read

    从标准输入读取数据。

    例: 
    $ read var1 var2 var3 
    Hello my friends 
    $ echo $var1 $var2 $var3 
    Hello my friends 
    $ echo $var1 
    Hello

     

    9.10       shift

    9.10.1 每次调用的时候,将参数列表中的第一个参数去掉。这样可以循环得到第一个参数。

    9.10.2 例子

    #cat t.sh

    sum=0

    until [ $# -eq 0 ]

    do

    echo $*

    sum=`expr $sum + $1`

    shift

    done

    echo result is: $sum

     

    #./t.sh 1 2 3

    1 2 3

    2 3

    3

     

     

    10       附件一:例子脚本

    10.1        脚本1

     

    10.2        

    11       附件二:Linux 易被遗漏的命令解析

    11.1       grep

    11.1.1 grep ‘string’ filename

    11.1.1.1e.i.: grep ‘list’ mytxt.txt 在mytxt.txt中寻找包含list字符串的所有行

    11.1.2 “-v” : 相反的。 即不包含字符串。

    11.1.2.1e.i.: grep –v ‘list’ mytxt.txt

    11.1.3 cat mytxt | grep ‘list’

    将cat mytxt作为源, 从中查找包含list字符串的行

    11.2       find

    11.2.1 -atime n : 指查找系统中最后n*24小时访问的文件;

    11.2.2 -ctime n : 指查找系统中最后n*24小时被改变状态的文件;

    11.2.3 -mtime n : 指查找系统中最后n*24小时被修改的文件。

    11.2.4 在当前目录下(包含子目录),查找所有txt文件并找出含有字符串"bin"的行
    find ./ -name "*.txt" -exec grep "bin" {} \;

    11.2.5 在当前目录下(包含子目录),删除所有txt文件
    find ./ -name "*.txt" -exec rm {} \;

     

    11.3       du

    11.3.1 显示文件的大小

    11.3.2 i.e.

    #du *.txt

    1230   myfile1.txt

    456    myfile2.txt

     

    11.4       awk

    11.4.1 提取输入中的某个参数

    11.4.2 i.e. 提取输入中每一行的第一个参数

    #echo `du *.txt | awk ‘{print $1}’`

    1230 456

    提取子字符串

    #echo `du *.bin | awk '{print substr($1,2,3)}'`

     

    11.5       前后台运行

    11.5.1 将某个程序在后台启动起来,只需要在命令的最后加上 & 符号。

    例如: ./test.sh &

     

    11.5.2 将当前正在运行的程序切换到后台

    11.5.2.1当按下^z的时候,当前的应用程序就会切换到后台,但是此时的状态是停止的状态。

    11.5.2.2使用jobs命令可以看到当前在后台运行的程序的列表。

    例如:jobs

    [1]+ stopped top

    [2]+stopped find | grep *.txt > a.log

     

    11.5.2.3使用bg命令可以将某个后台程序继续运行。

    #bg %2

    #jobs

    [1]+ stopped top

    [2]+ Running find | grep *.txt > a.log

     

    11.5.3 将后台运行的程序切回到前台

    #fg %2

    将find 命令切回到前台

    11.6       shell的执行选项

     

    -n 测试shell script语法结构,只读取shell script但不执行 
    -x 进入跟踪方式,显示所执行的每一条命令,用于调度 
    -a Tag all variables for export 
    -c "string" 从strings中读取命令 
    -e 非交互方式 
    -f 关闭shell文件名产生功能 
    -h locate and remember functions as defind 
    -i 交互方式 
    -k 从环境变量中读取命令的参数 
    -r 限制方式 
    -s 从标准输入读取命令 
    -t 执行命令后退出(shell exits) 
    -u 在替换中如使用未定义变量为错误 
    -v verbose,显示shell输入行

     

    11.7       alias

    建立别名

    alias dir ls

    11.8        xargs

    执行本命令的第一个参数,并将xargs的输入作为被执行命令的参数

    例如:

    find . -name '*.c' | xargs cat

    将本目录及其子目录下所有的C文件使用cat命令显示其内容。

     

    12       附件三:Bash中影响环境变量的命令

     

    Shell有若干以变量为工作对象的命令,其中有些命令似乎重复了。例如,可以用declare、export和typeset命令来创建全局(或转出)的变量。typeset命令是declare的同义词。

     

    Declare 命令

     

    语法:

    declare [options] [name [= value]]

     

    摘要:

    用于显示或设置变量。

    declare命令使用四个选项:

    -f   只显示函数名

    -r   创建只读变量。只读变量不能被赋予新值或取消设置,除非使用declare或者typeset命令

    -x   创建转出(exported)变量

    -i   创建整数变量。如果我们想给一个整数变量赋予文本值,实际上是赋予0使用+ 代替-,可以颠倒选项的含义。

     

    如果没有使用参数,则declare显示当前已定义变量和函数的列表。让我们关注一下-r选项:

     

    $ declare  –r  title=" paradise Lost"

    $ title = " Xenogenesis"

    bash: title: read-only variable

    $ declare title= " Xenogenesis"

    $ echo $title

    Xecogenesis

    $ typeset title = " The Longing Ring”

    $ echo $title

    The Longing Ring

     

    这个示例表明,只有declare或typeset命令可以修改只读变量的值。

     

     

     

    export命令

     

    语法:

     export [options] [name [= value]]

    摘要:

    用于创建传给子Shell的变量。

    export命令使用四个选项:

    --   表明选项结束。所有后续参数都是实参

    -f   表明在“名-值”对中的名字是函数名

    -n   把全局变量转换成局部变量。换句话说,命名的变量不再传给子Shell

    -p   显示全局变量列表

     

    如果没有用参数,则假定是一个-p参数,并且显示出全局变量的列表:

     

    $ export

    declare –x ENV = "/home/medined/ . bashrc"

    declare –x HISTFILESIZE = "1000"

    declare –xi numPages = "314"

    declare –xr title = "The Longing Ring"

    declare –xri numChapters = "32"

     

    这种显示的一个有趣的特性是,它告诉我们哪些变量只能是整数、是只读的,或者二者皆可。

     

    let命令

     

    语法:

    let expression

    摘要:

    用于求整数表达式的值。

     

    let命令计算整数表达式的值。它通常用来增加计数器变量的值,如例5-9所示。

     

    例5-9 let——使用let命令

    # ! /bin/bash

    count=1

    for element in $@

    do

       echo " $element is element $count"

       let count+=1

    done

     

    下面是这个脚本运行结果示例:

    $ chmod + x let

    $ . /let one two three

    one is element 1

    two is element 2

    three is element 3

     

    注意:如果我们习惯在表达式中使用空格,那么要用双引号把表达式括起来,如:

    let "count + =1"

    否则会导致语句错误。

     

    local 命令

     

    语法:

           local [name [= value]]

    摘要:

           用于创建不能传给子Shell的变量。这个命令仅在过程内部有效。

     

    简单说来,local命令创建的变量不能被子Shell存取。因此,只能在函数内部使用local命令。我们可以在命令行或脚本中使用“变量=值”这种形式的赋值命令。如果使用local时不带实参,那么当前已定义的局部变量列表就送往标准输出显示。

     

    readonly命令

     

    语法:

           readonly [options] [name[ = value]]

    摘要:

    用于显示或者设置只读变量。

    Readonly命令使用两个选项:

    --    表明选项结束。所有后续参数都是实参

    -f    创建只读函数

     

    如果没有用参数,则readonly显示当前已定义的只读变量和函数的列表。

     

    set命令

     

    语法:

           set [--abefhkmnptuvxidCHP] [-o option] [name [= value]]

    摘要:

    用于设置或者重置各种Shell选项。

     

    set 命令可实现很多不同的功能——并非其中所有的功能都与变量有关。由于本节的其他命令重复了通过set命令可用的那些变量选项,所以这里对set命令不做详细说明。

     

    shift命令

     

    语法

    shift [n]

    摘要:

    用于移动位置变量。

     

    shift命令调整位置变量,使$3的值赋予$2,而$2的值赋予$1。当执行shift命令时,这种波动作用影响到所定义的各个位置变量。往往使用shift命令来检查过程参数的特定值——如为选项设置标志变量时。

     

    typeset命令

     

    语法:

    typeset [options] [name [= value]]

    摘要:

    用于显示或者设置变量。

     

    typeset 命令是declare命令的同义词。

     

     

    unset命令

     

    语法:

    unset [options] name [name …]

    摘要:

    用于取消变量定义。

    unset命令使用两个选项:

    --  表明选项结束,所有后续参数都是实参

    -f  创建只读函数

     

    unset命令从Shell环境中删除指定的变量和函数。注意,不能取消对PATH、IFS、PPID、PS1、PS2、UID和EUID的设置。如果我们取消RANDOM、SECONDS、LINENO或HISTCMD等变量的设置,它们就失去特有属性。

     

    原文地址:https://www.cnblogs.com/chen-lhx/p/5743438.html

    展开全文
  • linux系统下,模糊匹配,可批量删除redis的key,修改ip即可使用。试用场景:redis内存爆满、redis不能定时清理数据等。
  • 使用FTP定时批量下载指定文件的shell脚本,具体实例介绍如下所示,需要的朋友参考下吧
  • ubuntu及shell脚本常用命令入门

    千次阅读 2020-12-13 21:29:35
    一、Shell命令 二、ubuntu软件安装方法 ...十二、shell脚本入门 一、Shell命令 查看命令详细信息 命令 --help 1、目录信息查看命令ls ls -a 显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的 ls -l 显示文

    一、Shell命令
    二、ubuntu软件安装方法
    三、Ubuntu文件系统结构
    四、ubuntu磁盘文件
    五、Linux下常用的压缩格式
    六、linux用户和用户组
    七、Ubuntu/Linux文件权限
    八、linux连接文件
    九、vim编辑器
    十、linux C编程
    十一、Makefile的基本语法
    十二、shell脚本入门

    一、Shell命令
    查看命令详细信息 命令 --help

    1、目录信息查看命令ls 
    	ls -a 显示目录所有文件及文件夹,包括隐藏文件,比如以.开头的
        ls -l 显示文件的详细信息 文件名后*代表可执行文件
        ls 目录 查看某一目录下的文件
        ls test/* 查看test目录下所有文件及子文件
    2、目录切换命令                 cd 
        tab键补全目录剩余信息
    3、当前路径显示命令             pwd
    4、系统信息查看命令             uname
        uname -a 查看系统版本内核等详细信息
    5、清理屏幕命令                 clear
    6、显示文件内容命令             cat
        cat /etc/profile
    7、切换用户身份命令             sudo
        sudo apt-get install mplayer
    8、文件拷贝命令                 cp
        cp a.c b.c  ->把a.c拷贝到b.c
        cp -r test1 test2 复制test1目录到test2目录
    9、切换用户命令                 su
        sudo su 切换管理员身份
        sudo su zkh 切换回用户身份
    10、移动文件命令                mv
        mv a.c b.c 可用于文件的重命名
        mv test/ test1/ 重命名文件夹
        mv a.c test1/
    11、创建文件夹命令              mkdir
        mkdir test
    12、创建文件命令                touch
        touch a.c
    13、删除命令                    rm
        rm a.c 删除a.c文件
        rm 目录 -f 强制删除 删除不询问...
                -r 递归删除 把目录及子目录文件全都删除 不然无法删除目录
                -rf 可删除文件夹 或使用 rmdir
    14、目录删除命令                rmdir
    15、显示网络配置信息命令        ifconfig
        可显示网卡信息
        ifconfig -a 查看所有网卡的信息
        sudo ifconfig 网卡名 up     挂载网卡
        sudo ifconfig 网卡名 down   禁用网卡
        sudo ifconfig 网卡名 IP地址 修改IP地址
        ifconfig --help 查看命令帮助
    16、重启命令                    reboot
    17、关机命令                    poweroff
    18、系统帮助命令                man
        man printf 查看printf函数的详细信息
        快速查询系统详细设计文件
        --help只显示一部分 man为查看完整的设计文件
    19、数据同步写入磁盘命令        sync
        将缓冲区中的数据写入磁盘 以免在拔出磁盘的时候 缓冲区的数据尚未写入
    20、查找文件命令                find
        find -name 文件名 查找当前目录及子目录下文件所在位置
    21、查找内容命令                grep
        grep -r 查找文件夹下所有子文件内容中符合的内容
            -n 标出符合那一行的列数
            -i 忽略大小写
        grep -nr "ubuntu" /
                 查找内容  查找目录
    22、文件夹大小查看命令          du
        du -sh 查看目录/文件占用磁盘空间大小 不显示子目录
            -s 查看目录占用磁盘空间大小 不显示子目录和文件
            -h 以人类可读的方式显示占用磁盘空间大小
        du 目录 查看目录及子目录
    23、磁盘空间检查命令            df
        df -h 查看磁盘空间 以人类可读方式
    24、使用gedit打开某个文件命令   gedit
        gedit为软件 使用图形化界面进行文件的编辑
        gedit a.c
    25、当前的系统进程查看命令      ps
        ps -aux 显示包含所有其他使用者的进程
        嵌入式一般为单用户 因此一般使用ps 就行
        具体请查看man ps
    26、进程实时运行状态查看命令    top
    27、文件类型查看命令            file
        一般在ubuntu上编译arm上运行的软件 需要查看下编译后的文件类型
        可执行文件会显示给x86 还是arm运行
        file a.c
    

    二、ubuntu软件安装方法
    1、apt工具安装 (常用)

        sudo apt-get install 软件名称
        sudo apt-get install git
        sudo apt-get install mplayer
    

    2、deb软件包安装 (大型图形界面软件)

        在windows下安装为.exe文件 在ubuntu下则为.deb文件 可以直接双击安装
        sudo dpkg -i xxx.deb
        安装网易云音乐,
    

    3、源代码安装 (较少)

        (1)、百度下载tree源代码压缩包
        (2)、解压
        (3)、阅读readme 或install 查看如何安装
        (4)、make 编译
        (5)、sudo make install 安装
        (6)、测试 tree --help
        有些软件可能需要make config再安装
    

    4、app store
    5、其他安装方法
    QT安装 扩展名.run 得先安装IDE 百度

    三、Ubuntu文件系统结构

        /bin 	存放二进制可执行文件,这些命令在单用户模式下也能够使用。可以被root和一般的账号使用。
        /boot	Ubuntu内核和启动文件,比如vmlinuz-xxx。gurb引导装载程序。 
            /grub 用来启动ilnux
            vmlinux-4.15.0 linux内核文件
        /cdrom 因该是用来放光盘中的文件
        /dev		设备驱动文件
            嵌入式开发时 设备的驱动文件存放位置 对设备进行操作也是通过文件进行操作
            sda 磁盘文件 想写磁盘的话 直接对文件进行操作
        /etc		存放一些系统配置文件,比如用户账号和密码文件,各种服务的起始地址。
            profile文件 用于存放环境变量的一些配置
    	/home	系统默认的用户主文件夹,一般创建用户账户的时候,默认的用户主文件夹都会放到此目录下。
            zkh/ 
                lib/ 系统运行所需库
                    x86_64-linux-gnu/ 
                        .so linux下的一些动态库
    	/lib		存放库文件
    	/media	此目录下放置可插拔设备,比如SD卡,或者U盘就是挂载到这个目录中。
            zkh/ 查看可插拔设备
        /mnt	用户可使用的挂载点,如果要挂载一些额外的设备,那么就可以挂载到此处。
            hgfs/ 可用来与windows系统作为共享文件夹
        /opt		可选的文件和程序存放目录,给第三方软件放置的目录。
        /root	root用户目录,也就是系统管理员目录。
    	/sbin	和/bin类似,也是存放一些二进制可执行文件。sbin下面的一般是系统开机过程中所需要的命令。
        /snap   包管理工具
    	/srv		服务相关目录。比如网络服务。
    	/sys		记录内核信息,虚拟文件系统。
    	/tmp	临时目录
    	/var		存放一些变化的文件,比如日志文件
    	/usr		usr不是user的缩写,而是UNIX Software Resource的缩写,存放与系统用户有关的文件,会占用很大的存储空间!
    	/proc	虚拟文件系统,数据放置到内存中,存放系统运行信息
            cat proc/cpuinfo 查看cpu信息
    

    四、ubuntu磁盘文件
    u盘格式设为FAT32 适合嵌入式linux

    1、ubuntu磁盘文件
        /dev/sd*文件,此类文件是磁盘设备文件,并不能直接访问磁盘,必须要将磁盘挂载到某一个目录下才可以访问。
        /dev/sdb和/dev/sdb1是U盘的设备文件。
        /dev/sdb表示U盘,/dev/sdb1表示U盘的第一个分区。
    
        cd /dev
        ls sd* 列出磁盘文件
    
    2、磁盘和目录的容量查询命令
        df:列出文件系统的整体磁盘使用量。主要查看个文件系统的使用量,
        du:评估文件系统的磁盘使用量,主要查看单个文件的大小。
        du -h 显示u盘下所有文件(包括子文件)的空间使用量
        du -h --max-depth=1 只显示一层的目录空间使用情况
    
    3、磁盘挂载与卸载,分区和格式化、
        1、磁盘的挂载和卸载
            dev为设备的连接 media为挂载点
    
            mount和umount命令
            视频中没卸载成功 哈哈 打开了文件怎么会卸载成功呢
            sudo umount 目录 目录为/media/zkh/中的文件名
                -f 强制卸载 不用也行
    
            cd /media/zkh/
            sudo mkdir 新建挂载点
            挂载只能挂实际内容sdb1 不能sdb
            sudo mount /dev/sdb1 /media/zkh/udisk/ 将sdb1挂载到udisk文件夹下
                -o iocharset=utf8 解决文件名中文乱码问题 不用也行
        2、磁盘分区
            fdisk命令
            sudo fdisk -l 查看磁盘分区
            sudo fdisk /dev/sdb 进入操作帮助进行磁盘操作
            p为主分区 e为可用空间
            操作后需要保存 如果删除u盘分区则有时候需要把u盘卸载
            创建中的扇区表示空间大小的区间
            创建后有时候需要格式化才能挂载
    
        3、磁盘格式化
            磁盘分区创建好以后就可以格式化磁盘,使用命令mkfs。如:
            sudo mkfs -t vfat /dev/sdx
                -t 所安装的文件系统类型
            分区后windows系统下就可以看到几个u盘分区
            删除分区
                windows下可以通过SDFormat软件将磁盘分区删除 
                也可以在linux下把分区删除在重新创建一个大的分区
    

    五、Linux下常用的压缩格式
    –help 查看各参数帮助信息
    1、Linux下常用的压缩扩展名有:.tar、.tar.bz2、.tar.gz。

    2、Windows下7ZIP软件的安装
        安装7ZIP
        因为Linux下很多文件是.bz2,.gz结尾的压缩文件,因此需要在windows下安装7ZIP软件。
        可通过将文件压缩为tar后再压缩为tar.bz2
    
    3、gzip压缩工具      只会对文件进行压缩(能递归压缩文件夹) 不会进行打包
        .gzip工具负责压缩和解压缩.gz格式的压缩包。
        gzip xxx			//压缩 a.c 文件会压缩为a.c.gz
        gzip -d xxx.gz	    //解压缩 a.c.gz文件会解压缩为a.c
    
        gzip对文件夹进行压缩
        gzip -r xxx		//对文件夹进行压缩
        gzip -rd xxx.gz	//对文件夹进行解压缩
    
        gzip虽然可以对文件夹进行压缩,但是并不能提供打包的服务,只是对文件夹中的所有文件进行了单独的压缩。
        对于文件夹来说并不压缩 只压缩文件夹下的文件。
    4、bzip2压缩工具     只会对文件进行压缩(不能递归压缩文件夹) 不会进行打包
        和gzip类似,只是bzip2工具负责压缩和解压缩.bz2格式的压缩包。
        bzip2 -z xxx			//压缩   a.c 文件会压缩为a.c.bz2
        bzip2 -d xxx.bz2        //解压缩 a.c.bz2文件会解压缩为a.c
    
    5、tar打包工具
        tar工具参数:
            -f,使用归档文件或 ARCHIVE 设备 使用归档的名字(一般放于最后)
            -c:创建新归档,创建压缩文件
            -x:从归档中解出文件,解压缩
            -j:使用bzip2压缩格式。
            -z:使用gzip压缩格式
            -v:打印出命令执行过程。
        参数的顺序有要求
    
        tar工具提供打包服务,就是将多个文件打包,比如
        tar -vcf test.tar test	//将test打包成test.tar
        tar -vxf test.tar		//解包
    
        上面的tar命令只提供了打包和解包的功能,tar在提供打包和解包的同时使用gzip/bzip2进行压缩,实现类似windwos下winRAR软件的命令。
        
        1、对.tar.bz2进行压缩和解压缩
        tar -vxjf xxx.tar.bz2	解压缩
        tar -vcjf xxx.tar.bz2 xxx 压缩
    
        2、对.tar.gz进行压缩和解压缩
        tar -vxzf	xxx.tar.gz		//解压缩
        tar -vczf xxx.tar.gz xxx 	//压缩
     
    6、其他格式的压缩和解压缩
        1、.rar格式 查找帮助直接rar 不用--help
        需要先安装rar:sudo apt-get install rar
        rar x xxx.rar		//解压缩
        rar a xxx.rar xxx	//压缩
    
        2、.zip格式 查找帮助直接rar 不用--help
        zip格式压缩使用“zip“命令:
        zip -rv xxx.zip xxx
        
        zip格式解压缩使用“unzip”命令:
        unzip xxx.zip       //解压文件
        unzip -v xxx.zip    //只查看压缩文件内容 不解压
    

    六、linux用户和用户组
    1、用户
    Linux是一个多用户操作系统,不同的用户拥有不同的权限。可以查看和操作不同的文件。 Ubuntu有三种用户:
    1、初次创建的用户。 2、root用户 3、普通用户。
    初次创建的用户权限比普通用户多,但是没有root用户多。

        Linux用户记录在/etc/passwd这个文件内。
        Linux用户密码记录在/etc/shadow这个文件内。
        每个用户都有一个ID,叫做UID。
    2、用户组
        为了方便管理,将用户进行分组。这样就可以设置非本组人员不能访问某些文件。每个用户可以属于多个不同的组。
    
        用户:家里有你、弟弟、妹妹个人,每个人都有自己的房间,你们三个人都是用户,你们都不能随便的乱翻别人的房间。
        用户组:你们三个都是一个家庭的,也就是属于同一个用户组,你们三个可以共用厨房,书房等空间。
    
        用户组为共享给组内用户公共资源 并不影响用户的私人资源
        一个用户可加入多个组
    
            因此:
            用户和用户组的存在就是为了控制文件的访问权限的。
            每个用户组都有一个ID,叫做GID。
    
            用户组及用户信息存储在/etc/group文件中。
                组名 密码 ID 包含的用户
                用户及用户组共用一套ID即 用户和用户组排在同一ID序列中
    3、创建用户和用户组
        (1)、图形化界面创建
            要使用图形化界面创建用户和用户组的话就需要安装gnome-system-tools这个工具:
            sudo apt-get install gnome-system-tools
        (2)、命令创建用户和用户组 要加sudo
            添加用户:adduser命令,adduser 用户名
            用户查询:finger命令,finger 用户名
            修改用户密码:passwd命令,passwd 用户名
            删除用户:deluser命令,deluser 用户名
    
            添加用户组:addgroup命令,addgroup 用户组名
            显示用户所属用户组:groups命令,groups 用户名
            删除用户组:delgroup命令,delgroup用户组名
            
            可通过修改用户权限、修改/etc/group、图形等方式把用户添加到用户组中
    
        命令创建可以只有三位密码 图形不行
        修改密码只能在所在的用户中 或sudo
    

    七、Ubuntu/Linux文件权限
    1、文件权限是指不同的用户或用户组对某个文件拥有的权限,文件的权限分为三种:
    r: 读 w:写 x:可执行。 文件描述形式如下: -rw-rw-r—就是文件权限,第一位表示文件类型,剩下的每三位表示一组权限。分别对应拥有者权限、拥有者所在组权限、其他用户权限。
    可以使用二进制表示文件权限。

           r=4
           w=2
           x=1
    
        a.c文件信息:
            --rw-rw-r--,a.c所属用户拥有读写权限无可执行权限。组内其他用户拥有读写权限无可执行权限,其他用户仅有可读权限。
            zkh zkh 用户 用户组
        ls -l /dev列出文件的详细信息
            列出的开头第一个字母为文件类型
                b 块文件
                c 字符文件
    2、Ubuntu/Linux文件权限修改
        1、修改文件权限命令
            chmod命令
            777 开放所有权限
            a 所有用户
            u 归属用户
            g 归属组
            o 其他用户
            w r x 权限
            u+x 所属用户添加执行权限
    
            chmod 777 文件名
        2、修改文件所属用户
            chown命令
            
            sudo chown root 文件名   将文件所属用户修改为root
            sudo chown .root 文件名  将文件所属组改为root
            sudo chown root.root 文件名 文件所属用户所属组一起修改为root
            sudo chown -R root.root 文件夹 文件夹中所有的文件一起修改
    
            文件中本用户无法执行 组外用户可执行 把文件所属用户调为组外用户 本用户即可执行
    
    所有用户都具有w权限时 文件名会高亮
    
    gcc hello.c -o hello 编译c文件 输出hello为可执行文件
    

    八、linux连接文件
    Linux有两种连接文件:符号连接(软连接)和硬链接,符号链接类似Windows下的快捷方式。硬链接通过文件系统的inode连接来产生新文件名,而不是产生新文件。
    inode:记录文件属性,一个文件一个inode。inode相当于文件ID,查找文件的时候要先找到inode,然后才能读出文件的内容。

    二、ln命令
        ln命令用于创建连接文件:
        ln [选项] 源文件 目标文件
            选项:-s 创建符号链接(软连接)
            -f 强制创建连接文件,如果目标存在,那么先删除掉目标文件,然后再建立连接文件。
    三、硬连接
        硬链接是多个文件都指向同一个inode,硬链接知识点:
        ①、具有相同inode的多个文件互为硬链接文件,创建硬链接相当于文件实体多了入口。
        ②、对于硬链接文件,只有删除了源文件以及对应的所有硬连接文件,文件实体才会被删除。
        ③、根据硬链接文件的特点,我们可以通过给文件创建硬连接的方式来防止文件误删除。
        ④、不论修改源文件还是连接文件,另一个文件的数据都会被改变。 (与源文件占用大小相同)
        ⑤、硬连接不能跨文件系统。
        ⑥、硬连接不能连接到目录。
    
        ln 文件名 连接文件名
    
    相当于把文件复制后相关联起来,方便多地操作
    因为以上这些限制,硬链接其实不常用。
    四、符号连接(软连接) 类似于指针
        符号连接类似Windows下的快捷方式,符号链接也叫做软连接,软连接要用的多。符号连接相当于创建了一个独立的文件,这个文件会让数据读取指向它连接的哪个文件的文件名。软连接的特点:
        ①、可以连接到目录。
        ②、可以跨文件系统。
        ③、删除源文件以后,软连接文件也就“打不开了”。
        ④、符号连接文件通过->来指示具体的连接文件。
        ⑤、符号连接要使用绝对路径,否则连接出问题。 当cp的使用要用-d 且如果不是绝对路径 赋值后文件无效
    
        cp的时候要把目录下保持所有文件的连接 就要-d 否则文件将复制 且链接文件要使用绝对路径 
    
        ln -s 文件绝对路径 连接文件名
        绝对路径~也可使用
    
    之前jupyter操作目录下的其他地方的磁盘文件就是依照此原理
    文件类型为l
    ll == ls -l
        -i 查看文件连接
    

    九、vim编辑器
    Linux系统都会自带vi编辑器,但是vi编辑器太难用了!所以建议大家安装vim编辑器,安装命令:
    sudo apt-get install vim

    1、vim编辑器三种工作模式
        vi xxx	使用vi编辑器打开文件。
    
        一般模式(指令模式):默认模式,用vi打开一个文件以后自动进入到此模式。
        编辑模式:一般模式中无法编辑文件,要编辑文件就要进入编辑模式,按下“i、I、a、A、o、O、s、r”等就会进入到编辑模式。一般按下“a”进入编辑模式。按下ESC键可退出编辑模式。
        命令行模式(底行模式):先进入到一般模式,然后输入:、/、?这三个中的任意一个就可以进入到命令行模式。
        /xxx,表示在文件中查找xxx
    
        视频用a 不过个人习惯用i
        详情可看开发板的开发手册
    
        【注意】(不建议)如果不正常退出 可删除.文件名.swp 但之前编辑的文件内容也会删除 
    2、保存退出
        当文件编辑好以后,输入:wq来保存退出。:q退出,:q!不保存退出,:w保存。
        :q退出 修改后不保存或!的话退不出去
        保存退出:wq 或:x
    
    
    3、其他操作方式
        (1)、按下键盘上的上下左右键来控制光标。
    
        一般模式下:
        (1)、dd,删除光标所在行,ndd,删除光标所在行及其下n行。
        (2)、u,撤销,恢复上一步。
        (3)、. ,重复前一个操作。
        (4)、yy,复制光标所在行
        (5),nyy,复制光标所在向下n行,比如10yy就是复制光标下10行。
        (6),p和P,p为复制到光标下一行,P复制到光标上一行。
        (7)、屏幕上下移动
            ctrl+f ctrl+b 上下翻一页 front back
            ctrl+d ctrl+u 上下翻半页 down up
    

    十、linux C编程
    可参考开发指南第三章
    1、编写C程序
    使用VIM编辑器编写程序,也可以使用vscode。
    1.1、设置vim编辑器

               设置vim编辑器,一个TAB=4个字节。
                   sudo vi /etc/vim/vimrc
                       最后输入 set ts=4
               设置vim编译器,显示行号。
                       set nu
    
        1.2、编写C程序
    
    2、编译C程序 
        使用gcc编译器编译C程序。 编译单个文件
        gcc -v 支持x86
        可在x86电脑上编译arm的文件
        gcc --help
        gcc 默认编译连接为可执行文件 生成.out文件
            -o 输出文件名
            -O 优化编译     可通过-o指定文件名
            -O2 更深层优化  可通过-o指定文件名
            -v 查看过程
        详细信息查看开发手册
        编译流程:预处理(宏) -> 汇编 -> 编译 -> 链接
        多个文件时 生成.o 用于makefile编译
    
        gcc main.c calcu.c input.c -o main 
        gcc -c main.c
        gcc -c calcu.c
        gcc -c input.c
        gcc main.o calcu.o input.o -o main 这样修改了哪个就可以只重新编译哪个为o
    3、make工具和Makefile文件   编译整个工程文件
        当源码文件比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要一个自动化的编译工具.
        make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行的二进制文件,
            make工具主要用于完成自动化编译。make工具编译的时候需要Makefile文件提供编译文件。
            实现自动化编译 且可只编译修改项的相应文件 避免不必要的编译
        Makefile(makefile):make工具所使用的文件,Makefile指明了编译规则。
            生成(目标):需要(依赖)
                执行
    
            main:main.o input.o calcu.o
                gcc -o main main.o input.o calcu.o
            main.o:main.c
                gcc -c main.c
            input.o:input.c 
                gcc -c input.c 
            calcu.o:calcu.c 
                gcc -c calcu.c 
            
            clean:
                rm *.o
                rm main 
    
            执行 make 
                make clean
        makefile编译规则详情看开发指南
    
        编写一个小型的含有多个.c文件的C程序。
    

    十一、Makefile的基本语法
    变量要声明为全局
    1、Makefile中的变量为字符串 可通过变量代替较长的依赖

        objects = main.o input.o calcu.o
        main: $(objects)
            gcc -o main $(objects)
        ...
        
        name = zkh
        curname = $(name)
        name = zkh2
        print:
            @echo $(curname)
    
        输出zkh2 Makefile中变量的值取决于他所引用的变量最后一次的有效值
            可通过:=来赋值 类似正常=赋值
        ?= 如果前面没有被赋值 则赋值 否则使用前面的赋值
        += 在字符串后面添加
    2、shell命令前加@不将执行过程显示出来 也可不加
    3、通配符% 自动化变量 用于批量编译 
        目标%中的内容取决于依赖%中的值
        %.o:%.c
            gcc -c $<
            命令
    
        $@
            规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模
            式中定义的目标集合。
        $%
            当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,
            那么其值为空。
        $<
            依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%”)定义的,那么
            “$<”就是符合模式的一系列的文件集合。
        $?  
            所有比目标新的依赖目标集合,以空格分开。
        $^
            所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,
            “$^”会去除重复的依赖文件,值保留一份。
        $+  
            和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。
        $*
            这个变量表示目标模式中"%"及其之前的部分,如果目标是 test/a.test.c,目标模
            式为 a.%.c,那么“$*”就是
    4、makefile伪目标
        如clean 当工程中有名为clean的文件时就会执行失败
        解决方法:将clean声明为伪目标
            .PHONY:clean
            clean:
                ...
    5、makefile函数
        不支持自定义函数 但有自带函数 具体详见光盘 -> 参考资料 -> 跟我一起写Makefile
    

    十二、shell脚本入门
    一、shell脚本入门
    我们已经能够熟练的在终端中输入命令来完成一些常用的操作,但是我们都是一条一条输入命令。这样会很麻烦,
    那么有没有一种方式可以将很多条命令放到一个文件里面,然后直接运行这个文件即可?肯定有,这个就是shell脚本!
    shell脚本类似windows的批处理文件,shell脚本就是将连续执行的命令写成一个文件。
    shell脚本提供数组、循环、条件判断的等功能。shell脚本一般是Linux运维或者系统管理员要掌握的,
    作为嵌入式开发人员,只需要掌握shell脚本最基础的部分即可。

    二、shell脚本写法
        shell脚本是个纯文本文件,命令从上而下,一行一行的开始执行。shell脚本扩展名为.sh。
        shell脚本第一行一定要为:
            #!/bin/bash
            表示使用bash。
    
    三、shell脚本语法
        3.1第一个shell脚本  
            一般shell脚本文件需要添加执行权限 默认没有执行的权限
            #!/bin/bash
            echo "hello world"
        3.2、交互式shell脚本
            read。
    
            #!/bin/bash
            echo "input your name:"
            read name 
            echo "yourname:" $name 
                        这中间不能加+
    
            #!/bin/bash
            read -p "input your age and weight" age weight
            echo "your age=$age and weight=$weight"
    
        3.3、shell脚本的数值计算
            shell仅支持整形,数值计算使用$((表达式))。
            #!/bin/bash
            echo "input two num:"
            read -p "first num" first
            read -p "second num " second
            total=$(($first+$second))   //加号两边加空格无影响 变量的赋值=两边不能有空格
            echo "$first + $second = $total"
        3.4、test命令
            test命令用于查看文件是否存在、权限等信息,可以进行数值,字符,文件三方面的测试。
    
        &&和||命令:
            cmd1 && cmd2 当cmd1执行完并且正确,那么cmd2开始执行,如果cmd1执行完毕错误,那么cmd2不执行。
            cmd1 || cmd2 当cmd1执行完毕并正确,那么cmd2不执行,反之cmd2执行。
        
            //查找文件是否存在
            #!/bin/bash
            echo "input filename"
            read -p "filename" filename
            test -e $filename && echo "$filename exist" || echo "$filename not exist"
    
            //查看字符串是否相等
            #!/bin/bash
            echo "input two string"
            read -p "firststring" firststr
            read -p "secondstring" secondstr 
            test $firststr == $secondstr && echo "firststring == secondstring" || echo "firststring != secondstring"
    
        3.5、中括号[]判断符
            [  ] ==或 !=
            输入前后加空格 无论是否为变量 都需要加双引号
            [ "$firststr" == "$secondstr" ]  =两边空格不能少 不然会出错 多了倒是不会报错
    
            //判断字符串是否相等
            #!/bin/bash
            echo "input two string"
            read -p "firststring" firststr
            read -p "secondstring" secondstr 
            [ "$firststr" == "$secondstr" ] && echo "firststring == secondstring" || echo "firststring != secondstring"
    
        3.6、默认变量
            $0~$n,表示shell脚本的参数,包括shell脚本命令本身,shlle脚本命令本身为$0
            $#:#表示最后一个参数的标号。
            $@:表$1、$2、$3......
    
            #!/bin/bash
            echo "file name: " $0      //根据执行文件时的路径来决定 是否是绝对路径或相对路径 各自输出不同
            echo "num of param: " $#
            echo "whole param: " $@
            echo "first param: " $1
            echo "second param: " $2
    四、shell注释方式
        单行 #
        多行 两处注释符号需要独立一行 两者缺一不可
            :<<!
            内容
            !
    五、shell脚本条件判断
        shell脚本支持条件判断,虽然可以通过&&和||来实现简单的条件判断,但是稍微复杂一点的场景就不适合了。
        shell脚本提供了if then条件判断语句,写法
            [  ]
        if  条件判断 ; then
        //判断成立要做的事情 前面可tab也可不tab
        fi
    
        //判断输入是y|n
        #!/bin/bash
        read -p "input[Y/n]" $value
        if [ "$value" == "Y" ] || [ "$value" == "y" ];then
            echo "input is y"
            exit 0      //也可以不加 但是会运行下一个判断 没必要 会多耗费执行时间
        fi
        if [ "$value" == "N" ] || [ "$value" == "n" ];then
            echo "input is n"
            exit 0
        fi
    
        还有if then else 语句,写法
        if  条件判断 ; then
        //条件判断成立要做的事情
        else
        //条件判断不成立要做的事情。
        fi
    
        或:
        if  条件判断 ; then
        //条件判断成立要做的事情
        elif [条件判断]; then
        //条件判断成立要做的事情
        else
        //条件判断不成立要做的事情。
        fi
    
        //判断输入是y|n|?
        #!/bin/bash
        read -p "input[Y/n]" $value
        if [ "$value" == "Y" ] || [ "$value" == "y" ];then
            echo "input is y"
        elif [ "$value" == "N" ] || [ "$value" == "n" ];then
            echo "input is n"
        else
            echo "input can not identify"
        fi
    
        最后还有case语句
        case $变量 in
        “第1个变量内容”)
            程序段
            ;;	//表示该程序块结束!!
        “第2个变量内容”)
            程序段;;
        “第n个变量内容”)
            程序段
            ;;
        esac
    
        #!/bin/bash
        case $1 in
            "a") # ""可加可不加 可以为数字 数字""也是可加可不加 不影响 多个字符也是一样
                echo "input is a"
                ;;
            "b") # ""可加可不加 可以为数字 数字""也是可加可不加 不影响 多个字符也是一样
                echo "input is b"
                ;;
            *)
                echo "input can not identify"
                # 最后可加可不加;;
        esac
    
    
    六、shell脚本函数
        shell脚本也支持函数,函数写法如下:
        function fname () {
            //函数代码段
        }
        function可写可不写
    
        #!/bin/bash
        function help(){
            echo "this is help"
        }
        function close(){
            echo "this is close"
        }
        case $1 in 
            "-h")
                help
                ;;
            "-c")
                close
                ;;
            *)
                echo "input can not identify"
        esac
    
        #!/bin/bash
        print(){
            echo $1 $2  //$0与文件相同 但$1 开始为局部变量并不继承文件$1等 无值则忽略
        }
        print $1 $2
    
    七、shell循环
        shell脚本也支持循环,比如 while do done,表示当条件成立的时候就一直循环,直到条件不成立。
        输出未定义空变量不会报错
        
        while [条件] 	//括号内的状态是判断式
        do			//循环开始
            //循环代码段
        done
    
        #!/bin/bash
        while [ "$value" != "close" ]
        do
            read -p "input string:" value
        done
        echo "stop while"
    
        还有另外一种until do done,表示条件不成立的时候循环,条件成立以后就不循环了,写法如下:
        until [条件]
        do
        //循环代码段
        done
    
    
        for循环,使用for循环可以知道有循环次数,写法
        for var in con1 con2 con3……
        do
        //循环代码段
        done
    
        #!/bin/bash
        for name in zkh zkh1 zkh2 zkh3 
        do
            echo $name
        done
    
        for循环数值处理,写法
        for((初始值; 限制值; 执行步长))
        do
        //循环代码段
        done
    
        #!/bin/bash
        read -p "input count: " count
        total=0
        for((i=0;i<count;i++))
        {
            total=$(($total+$i)) //引用的时候才加$ 赋值不加
        }
        echo "total: $total"
    
    展开全文
  • 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:复制代码 代码如下:cd /data/shell./hello.sh./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响...

    bash shell 脚本的方法有多种,现在作个小结。假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限。

    方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:

    复制代码 代码如下:

    cd /data/shell

    ./hello.sh

    ./的意思是说在当前的工作目录下执行hello.sh。如果不加上./,bash可能会响应找到不到hello.sh的错误信息。因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用

    echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。

    方法二:以绝对路径的方式去执行bash shell脚本:

    复制代码 代码如下:

    /data/shell/hello.sh

    方法三:直接使用bash 或sh 来执行bash shell脚本:

    复制代码 代码如下:

    cd /data/shell

    bash hello.sh

    复制代码 代码如下:

    cd /data/shell

    sh hello.sh

    注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将hello.sh作为参数传给sh(bash)命令来执行的。这时不是hello.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了啊,呵呵……。

    方法四:在当前的shell环境中执行bash shell脚本:

    复制代码 代码如下:

    cd /data/shell

    . hello.sh

    复制代码 代码如下:

    cd /data/shell

    source hello.sh

    前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。

    每天一个linux命令(62):sh命令 &sol;Linux中执行shell脚本的4种方法总结

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

    Linux中执行shell脚本的4种方法总结

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

    Linux中执行shell脚本的4种方法

    bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在 ...

    Linux 中执行Shell 脚本的方式(三种方法)

    Shell 脚本的执行方式通常有如下三种: (1)bash script-name 或者 sh script-name:(2)path/script-name或者./script-name:(3)so ...

    Linux 定时执行shell脚本命令之crontab

    crontab可以在指定的时间执行一个shell脚本以及执行一系列Linux命令 例如:服务器管理员定时备份数据库数据.日志等 详解: 常用命令: crontab –e //修改 crontab 文件 ...

    在Linux中执行&period;sh脚本,异常

    在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...

    在Linux中执行&period;sh脚本,异常&sol;bin&sol;sh&Hat;M

    在Linux中执行.sh脚本,异常/bin/sh^M 在linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分 ...

    linux中删除文件内空白行的几种方法。

    linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...

    linux中快速清空文件内容的几种方法

    这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...

    随机推荐

    Right Here Waiting

    俺不会和小时候一样,因为别人听,自己就不听了^^

    Android项目实战(二十):浅谈ListView悬浮头部展现效果

    先看下效果:需求是 滑动列表 ,其中一部分视图(粉丝数,关注数这一部分)在滑动到顶端的时候不消失,而是停留在整个界面头部. 我们先分析要解决的问题: 1.如何实现列表ListView顶部视图跟随Lis ...

    Django 应用 Buildbot

    Django作者之一 JACOB KAPLAN 所写的buildbot应用在Django系统. 全文总共分为两个部分 1,http://jacobian.org/writing/ci-is-hard/ ...

    Python中如何把一个UTC时间转换为本地时间

    需求: 将20141126010101格式UTC时间转换为本地时间. 在网上搜了好长时间都没有找到完美的解决方案.有的引用了第三方库,这就需要在现网安装第三方的软件.这个是万万不可的.因为真实环境不一 ...

    HDU 5938 Four Operations 【贪心】(2016年中国大学生程序设计竞赛(杭州))

    Four Operations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

    javascript每日一练(六)——事件一

    一.event对象 var oEvent = ev || event;//获取事件对象 oEvent.clientX oEvent.clientY//获取鼠标坐标 oEvent.cancelBubbl ...

    tar split cat 创建、合并分卷压缩包

    最近用微盘传文件遇到的问题,超过100M不能一次传啊,想想win下有rar和zip创建分卷压缩包很简单,就像linux的tar打包器应该也可以吧,搜了下,要和split配合完成 具体命令如下:对文件: ...

    1021&period; Deepest Root &lpar;25&rpar; -并查集判树 -BFS求深度

    题目如下: A graph which is connected and acyclic can be considered a tree. The height of the tree depend ...

    从壹开始微服务 &lbrack; DDD &rsqb; 之七 &boxV;项目第一次实现 &amp&semi; CQRS初探

    前言 哈喽大家周五好,我们又见面了,感谢大家在这个周五读我的文章,经过了三周的时间,当然每周两篇的速度的情况下,咱们简单说了下DDD领域驱动设计的第一部分,主要包括了,

    【并查集缩点&plus;tarjan无向图求桥】Where are you &commat;牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

    展开全文
  • 主要介绍了Shell脚本实现复制文件到多台服务器的代码分享,用在多机集群环境中非常方便,需要的朋友可以参考下
  • Linux shell脚本命令汇总(不断更新)

    千次阅读 2020-04-19 11:48:01
    Shell 是什么? Shell 指一种应用程序,它提供了一个界面 用户... Linux的精髓:将多个程序(命令)组装成大型程序, 而Shell 就是最好粘合剂 Shell的优点 简单、高效、易维护、随写随用 Shell 开发流程:需求分析...

    Shell 是什么?

    • Shell 指一种应用程序,它提供了一个界面 用户通过这个界面访问操作系统内核的服务
    • Shell 脚本(shell script) 用shell 编写的脚本程序。 shell 通常都是指 shell 脚本
    • Linux的精髓:将多个程序(命令)组装成大型程序, 而Shell 就是最好粘合剂
    • Shell的优点 简单、高效、易维护、随写随用
    • Shell 开发流程:需求分析、问题建模、为代码流程逻辑、代码实现与运行、总结
    • 脚本所有种类查看:cat /etc/shells 
    • 正在使用的种类:echo $SHELL
    • 编码规范:多加注释说明、命名建议规则:变量名大写、局部变量小写、函数名小写、函数变量 加 local
    • 编辑器 VS Code:宿主机中写的代码,同步到虚拟机中,需要设置共享文件夹,配置sftp:查看 -> 命令面板 -> SFTP config

    使用:

    • bash头部默认用bash:#!/bin/bash
    • 注释:#单行注释用于行首解释说明,多行注释用::<<EOF ...EOF

    Shell 基础语法:

    • 变量:命名只能使用英文字母,数字和下划线、首个字符不能以数字开头、中间不能有空格,可以使用下划线(_)、不能使用bash里的关键字(help命令查看)
    • 变量分类:局部变量、环境变量、特殊变量
    • 局部变量:仅在当前shell实例中有效、在脚本或命令中定义、函数内的变量 加 local
    • 变量的定义和使用:
      #!/bin/bash
      
      # 1. 变量的定义 和使用
      my_name=zhangchulan
      echo "1. $my_name"
      
      # 2. 另一种定义方式
      course="linux start"
      echo 2. ${course}
      
      # 3. 只读变量, 不加$
      readonly course
      course="linux kernel"
      echo "3. ${course}"
      
      # 4. 删除变量, 不加$
      unset my_name
      echo  "4. ${my_name}"
      
      
      结果:
      1. zhangchulan
      2. linux start
      2-variable.sh: line 13: course: readonly variabl

    基本运算:

    • 算术运算:expr 求值操作、+加、 -减、 *乘、 /除、 % 取余
      #!/bin/bash
      # 算术基本运算, 加减乘除取余
      a=11
      b=5
      
      # 加法 expr
      val=`expr $a + $b`
      echo "$a + $b = $val"
      
      # 另一种数值运算 $[var]
      val=$[a-b]
      echo "$a - $b = $val"
      
      结果:
      11 + 5 = 16
      11 - 5 = 6

       

    • 关系运算: -eq 相等、-ne 不相等、-gt 大于、-ge 大于等于、-lt 小于、-le 小于等于
    #!/bin/bash
    # 关系运算
    a=11
    b=5
    
    #例子, 其他 ne, gt, ge, lt, le 类似
    if [ $a -eq $b ]
    then
        echo "$a -eq $b : a 等于 b"
    else
        echo "$a -eq $b: a 不等于 b"
    fi
    
    结果:
    11 -eq 5: a 不等于 b
    • 布尔与逻辑运算:! 非运算 [ ! false ]、-o 或运算、-a 与运算 [ $a -lt 100 -a $b -gt 15 ] 、&& 逻辑与 [[ $a -lt 100 && $b -gt 100 ]] 、|| 逻辑或 、== 相等(数字)、 != 不等(数字)
    #!/bin/bash
    # 布尔运算
    a=11; b=5
    #例子, 其他 ne, gt, ge, lt, le 类似
    if [ $a -eq $b ]
    then
        echo "$a equal $b : a 等于 b"
    else
        echo "$a not equal $b: a 不等于 b"
    fi
    
    # 逻辑运算 注意 两个 [[ ]]
    if [[ $a -gt 0 && $b -gt 0 ]]
    then
        echo "a, b 都大于 0"
    fi
    
    结果:
    11 not equal 5: a 不等于 b
    a, b 都大于 0

     

    • 字符串:单引号:原样输出,变量无效;双引号:可以包含变量
    #!/bin/bash
    course="Linux入门"
    
    # 单引号
    question="Linux 如何入门?$course"
    echo $question
    
    # 双引号
    answer="请学习$course:课程!"
    echo $answer
    
    # 字符串拼接
    echo "拼接后一起输出:\n"$question"\n"$answer
    
    结果:
    Linux 如何入门?Linux入门
    请学习Linux入门:课程!
    拼接后一起输出:
    Linux 如何入门?Linux入门
    请学习Linux入门:课程!
     1 #!/bin/bash
      2 # 字符串长度
      3 str="hello wolrd"
      4 echo "字符串"$str"的长度为:"${#str}
      5 
      6 # 获取子串, 从第1个字符开始,截取3个。
      7 echo "字符串"$str"子串:"${str:1:3}
      8 
      9 # 查找子串
     10 matched=`expr index "$str" wo`                                                                                      
     11 echo "字符串" $str "查找wo的位置在" $matched
    
    结果:
    字符串hello wolrd的长度为:11
    字符串hello wolrd子串:ell
    5
    字符串 hello wolrd 查找wo的位置5
    • 字符串运算符:
      1 #!/bin/bash                                                                                                         
      2 # 算术基本运算, 加减乘除取余
      3 a=11
      4 b=5
      5 
      6 # 加法 expr
      7 val=`expr $a + $b`
      8 echo "$a + $b = $val"
      9 
     10 # 另一种数值运算 $[var]
     11 val=$[a-b]
     12 echo "$a - $b = $val"
    
    结果:
    11 + 5 = 16
    11 - 5 = 6

     

    • 数组:定义, 下标从 0 开始、设置/读取、读取数组所有元素 @、读取数组长度
      1 #!/bin/bash                                                                                                         
      2 # 1. 数组的定义
      3 arr=(aa bb cc "hello world")
      4 # 2. 设置 元素
      5 arr[2]="222"
      6 # 3. 读取 元素
      7 echo  "下标为2的元素:"${arr[2]}
      8 # 4. 读取 所有元素, 用 @
      9 echo "所有元素:"${arr[@]}
     10 # 5. 获取数组长度, 用 #
     11 len=${#arr[@]}
     12 echo "数组长度:$len"
    
    结果:
    下标为2的元素:222
    所有元素:aa bb 222 hello world
    数组长度:4
    • 分支:if else \ case
      1 #!/bin/bash
      2 
      3 age=20
      4 if [ $age -le 10 ] # <=10
      5 then
      6     echo "少年"
      7 elif [ $age -le 20 ] # <=20
      8 then
      9     echo "青年"
     10 elif [ $age -le 50 ] # <=50
     11 then
     12     echo "中年"
     13 else # >50
     14     echo "老年"
     15 fi
    
    结果:
    青年
    
      1 #!/bin/bash                                                                                                         
      2 
      3 status=1
      4 case $status in
      5     0) echo "todo"
      6     ;;
      7     1) echo "doing"
      8     ;;
      9     2) echo "done"
     10     ;;
     11 esac
    
    结果:
    doing
    • 循环

      1 #!/bin/bash                                                                                                         
      2 # for 循环输出 数组内容
      3 arr=(aa bb cc)
      4 for item in ${arr[@]}
      5 do
      6     echo "$item"
      7 done
    
    结果:
    aa
    bb
    cc
    • 函数:function 关键字可选、函数后面的 () 可选
    •   1 #!/bin/bash                                                                                                         
        2 #函数的定义和调用
        3 function myfun()
        4 {
        5     echo "这是 shell 函数!"
        6 }
        7 
        8 myfun
      
      结果:
      这是 shell 函数!
      
        1 #!/bin/bash                                                                                                         
        2 #函数传参 和返回值
        3 function add()
        4 {
        5     local ret=$(($1+$2))
        6     return $ret
        7 }
        8 
        9 add 5 8
       10 echo $?
      
      结果:
      13

      常用命令

    • printf:打印输出
    • date:查看日期
    • cut: 截取 ,下标从1开始,举例: echo zhangchulan|cut -c2-3
    • 文本处理三剑客:grep 查找,sed编辑,awk报告
    • random根据date获取

    更多参考:https://wangdoc.com/bash/intro.htm

    展开全文
  • shell脚本常用命令

    千次阅读 2019-06-06 22:47:59
    一.diff命令 diff 命令:是用来比较两个文件或目录的不同,并且是以行为单位来比对的。一般是用在 ASCII 纯文本文件的比对上。由于是以行为比对的单位,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上...
  • shell脚本命令带换行 注释方法 命令行传参 在训练深度学习网络时,我们每次实验通常会有许多超参数需要设置,如batch size, epoch, gpu id, arch甚至还有一些具体的模型结构等。这事我们通常使用python模块...
  • 发现用其命令达不到预期效果,后来经检查发现,问题应该出现在sed排序上面,它仍然是按照位数来进行排序,并没有智能的按照范围来排序,sed取值命令如下: 代码如下: ls-lF *.txt | sed-n ‘/mydoc1/,/mydoc41/p’ ...
  • 最近在处理一个 `Python` 局部变量的作用域问题...所以知识这个东西还是要不断“温故”,今天要总结的 `Shell` 脚本命令也是,基本属于一看就会,一写不对的状态,所以还是要把常用的操作总结到一起,方便查找和复习...
  • shell脚本命令字符串

    千次阅读 2018-08-27 17:23:06
    工作中字符串操作举例  filename='/home/admin/jobs/CnClickstat/DFSLoader/loader.cfg'  #下面是使用shell字符串操作  buName1=${filename#*/jobs/} #去除'/home/admin/jobs/CnClickstat/DFS...
  • shell脚本命令解析过程】

    千次阅读 2018-06-16 10:24:55
    必须要知道命令解析过程的意义在于:能够清楚的知道命令解析步骤。若发生错误时,能够知道该怎样更改。 比如在博客:I/O重定向(点击打开链接)的举例:例①中,就有因为不知道命令行是如何读取的,而造成while语句...
  • linux--shell脚本常用脚本命令

    千次阅读 2018-06-14 22:39:03
    shell也是操作系统中的一个软件,他包含zailinux内核的外面,为了用户和内核之间的交互提供了一个接口系统中的命令用shell去解释shell接收到系统回应的输出并显示其到屏幕上什么是shell脚本?脚本是一种解释型语言 #...
  • 一、linux命令如何新建一个文件...二、写一个最简单的shell脚本 vi test.sh 进入到文件中,点击 i 进入编辑模式 #!/bin/bash # 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行; e...
  • shell脚本学习手册

    2019-01-17 14:33:01
    1、shell脚本 3 2、shell脚本实践 4 Shell变量 4 1、使用变量 5 2、只读变量 5 3、删除变量 5 4、变量类型 6 5、shell字符串 6 6、Shell数组 7 7、Shell注释 9 Shell传递参数 9 1、实例 9 Shell数组 11 Shell运算符 ...
  • 主要介绍了shell脚本递归遍历目录及子目录的例子,需要的朋友可以参考下
  • java调用shell脚本 public static String bashCommand(String command) {Process process = null;String stringBack = null;List processList = new ArrayList();try {process = Runtime.getRuntime().exec(command)...
  • shell脚本调用python脚本,并传参。 本文以删除指定文件夹下,以当前时间为基准 的指定天数以前的文件,包括空文件夹
  • Shell脚本中常用的命令(一)

    千次阅读 2020-02-13 22:05:10
    在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器) 它类似于DOS下的command.com和后来的cmd.exe,它接收用户命令,然后调用相应的应用程序 同时它又是一种程序设计...
  • Vim编辑器与Shell脚本命令

    千次阅读 2020-04-10 18:29:58
    文章目录4.1 Vim编辑器1、Vim编辑器三种模式:2、命令模式3、输入模式4、末行模式5、练习4.2 编写Shell脚本1、Shell脚本2、编写简单的脚本3、接收用户的参数4、判断用户的参数4.3 流程控制语句4.3.1 if条件测试语句1...
  • shell脚本中的sed命令用法

    千次阅读 2019-06-20 21:46:26
    Shell脚本sed命令 知识要点 sed命令的工作原理 sed的常用编辑命令 sed的替换命令 sed的特殊用法 sed命令的工作原理 sed是一种支持正则表达式的交互式流编辑器(stream editor) 脚本中修改文本或者文本...
  • 第二节 Shell脚本编写语法及命令2.1如何创建脚本文件?2.2标准输入重定向----脚本中的非交互式编辑文件2.3执行脚本的方式2.3.1.第一种方式(推荐使用)2.3.2.第二种方式2.3.3.第三种方式(极少用)2.4脚本编写语法2.4.1 ...
  • 文章目录一、Shell脚本概述1.Shell的作用2.Shell脚本应用场景3.Shell脚本编写规范4. 执行脚本文件(三种方法)二、重定向与管道1.交互式硬件设备2.重定向操作3.管道操作符号"|"二、Shell脚本变量1.变量的作用2.变量...
  • linux中shell脚本命令

    千次阅读 2020-02-16 17:05:34
    01 程序自身都有I/O •0:标准输入 •1:标准输出 •2:错误输出 –控制程序I/O位置 –一切皆文件 •/proc/$$/fd ...–程序是否处理I/O?...–$$:当前shell的PID:接收者 •$BASHPID:真实 03 管...
  • 脚本是先删除已经存在的文件,然后后台执行SQL语句将其执行结果以一定的格式写入文件 代码如下:#!/bin/bashif [ -f “/var/lib/mysql/hell.txt” ]; thenrm -f /var/lib/mysql/hell.txtecho “delete /var/lib/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 174,842
精华内容 69,936
关键字:

删除shell脚本命令