精华内容
下载资源
问答
  • shell脚本基本命令

    千次阅读 2018-02-11 16:07:08
    # 输入内容的命令 echo "hello word" ##定义变量 注意在定义变量的时候,变量与等号之间不能有空格 name="张三" # 输出 在输出变量的时候,我们需要在变量前面加上$(美元符) echo $name # 修改...
    #!/bin/sh
    # 输入内容的命令
    echo "hello word"
    ##定义变量 注意在定义变量的时候,变量与等号之间不能有空格
    name="张三"
    # 输出 在输出变量的时候,我们需要在变量前面加上$(美元符)
    echo $name
    # 修改name的值为 李四
    name="李四"
    #输出修改的值
    echo $name
    #定义只读的变量,不可以修改的变量,使用的关节字 readonly 变量名字,和java里面的final 一样
    readonly address="中国北京首都"
    #输出内容
    echo $address
    # 删除变量 使用 unset 命令可以删除变量
    unset name
    # 变量被删除后不能再次使用。unset 命令不能删除只读变量。
    # shell 语言中单引号 与 双引号的区别
    # 单引号里面的变量是无效的,双引号里面有变量
    #定义一个变量
    sex='男'
    #定义一个变量里面可以包含 sex
    sexs="this is "$sex" "
    #打印 sexs
    echo $sexs
    #拼接字符串
    # 首先定义一个字符串
    class='1509F'
    #拼接字符串
    classes="this is a test project manager ${class}"
    #输出内容
    echo $classes
    #获取字符串的长度
    echo ${#classes}
    #截取字符串
    echo ${classes:1:5}
    ##查找字符串 使用 expr index
    #echo `expr index "$classes" test`
    #顶一个 数组与Python中的元祖一样使用()
    names=('张三','李四','王五','赵六')
    
    欢迎大家收看哦!!!!

    展开全文
  • 主要介绍了25个好用的Shell脚本常用命令,由个人收集整理而来,需要的朋友可以参考下
  • Shell脚本基本命令

    千次阅读 2015-06-01 18:49:11
    shell脚本运行方式 $sh script.sh $sh /home/path/script.sh $chmod a+x script.sh ; $./script.sh echo的三种使用方式 echo hello world 不能包含一些特殊关键字,如分号; echo "hello word" 不能包含一些特殊...
    
     
    

    shell脚本运行方式

    $sh script.sh
    $sh /home/path/script.sh
    $chmod a+x script.sh ; $./script.sh

    脚本调试方法


    shell脚本的三种调试方法:
    -n   读一遍脚本中的命令但不执行,用来检查脚本中的语法错误
    -v   一边执行脚本,一边将执行过的脚本命令打印到标准输出端
    -x   提供跟踪执行信息,将执行的每一条命令和结果一次打印出来
    这应该就像C语言的gdb一样有用吧,有助于检查错误
    使用这些选项有三种方法
    1.在命令行提供参数:$sh -x script.sh
    2.脚本开头提供参数:#!/bin/sh -x
    3.在脚本中用set命令启用or禁用参数:其中set -x表启用,set +x表禁用

    另:在写脚本的时候,需特别注意添加空格或换行或分号
    eg   text命令:  $[ 5 -lt 10 ]左方括号后须有空格,右方括号前也须有空格
            shell脚本中函数定义: foo() {后须有空格或换行
            shell脚本中,若同一行内写有两条命令须加分号
    与C语言不同的是,shell脚本中,返回值0表真,1表假。

    echo的三种使用方式

    echo hello world 不能包含一些特殊关键字,如分号;
    echo "hello word" 不能包含一些特殊字符,比如!
    echo 'hello word" 包含'$var'变量不能被求值


    echo默认会将一个换行符追加到输出后,如果想禁止,可以使用-n这个选项
    如果想要使某些转义字符生效,则可以使用-e这个选项,如 
    echo "\ta\tb" 会输出 \ta\tb
    echo -e "\ta\tb" 则会输出 a b


    显示某些进程的环境变量

    [hadoop@Hadoop ~]$ pgrep bash
    3182
    [hadoop@Hadoop ~]$ cat /proc/3182/environ 
    USER=hadoopLOGNAME=hadoopHOME=/home/hadoopPATH=/usr/local/bin:/bin:/usr/binMAIL=/var/mail/hadoopSHELL=/bin/bashSSH_CLIENT=192.168.1.1 5649 22SSH_CONNECTION=192.168.1.1 5649 192.168.1.10 22SSH_TTY=/dev/pts/0TERM=vt100SELINUX_ROLE_REQUESTED=SELINUX_LEVEL_REQUESTED=SELINUX_USE_CURRENT_RANGE=



    算术运算

    使用 let、(())、[]执行基本的算术运算。

    如let a = b+c; let a++;let a--;
    也可以使用[], a=$[b+c];  a=$[$b+5]
    也可以使用(()),不过都需要在变量前加上$
    删除变量:unset


    tee

    tee命令:以stdin作为输入,将其输入到某个文件中,并原样输出



    显示变量

    set 显示当前shell的变量,包括当前用户环境变量和自己定义的变量

    env 显示当前用户环境变量
    export 显示当前导出成用户变量的shell变量


    关联数组即 Map

    [hadoop@Hadoop ~]$ declare -A map_array
    [hadoop@Hadoop ~]$ map_array[index1]=val1
    [hadoop@Hadoop ~]$ map_array[index2]=val2
    [hadoop@Hadoop ~]$ echo ${map_array[*]}
    val1 val2
    [hadoop@Hadoop ~]$ echo ${!map_array[*]}
    index1 index2

    cat

    作用:读取、显示、拼接文件内容。
    将AB两个文件内容一块输出 [hadoop@Hadoop ~]$ cat A B
    将输入文本与A一块显示 [hadoop@Hadoop ~]$ echo "Hello" | cat - A
    压缩空白行 cat -s  A
    将制表符显示为^|  cat -T A
    显示文本行号 cat -n A


    find

    作用:查找路径及子路径下所有的文件和文件夹
    查找script目录下所有的文件
    [hadoop@Hadoop ~]$ find script/
    script/
    script/timing.log
    script/output.session


    根据文件名或正则表达式匹配搜索
    [hadoop@Hadoop ~]$ find script/ -name "t*" #必须用引号括起来
    [hadoop@Hadoop ~]$ find script/ -iname "t*" #忽略文件名的大小写


    可以用OR连接多个条件
    [hadoop@Hadoop ~]$ find script/ \( -name "t*" -o -name "out*" \)#注意空格
    script/timing.log
    script/output.session


    可以使用参数指定查找深度
     -maxdepth 1 #指定查找的最大深度

     -mindepth 1 #指定查找的最小深度,即只列出1层以上的文件列表


     根据文件类型搜索

     -type d #只列出文件夹  -type f #只列出普通文件


     此外还可以根据时间和文件大小,还可以使用-delete删除找到的文件。
     -exec 可以对查出的每一个文件分别进行处理,如将文件所有者root改为hadoop:
     [hadoop@Hadoop temp]$ sudo find . -type f -user root -exec chown hadoop {} \;

    xargs

    作用:将标准输入转换成命令行参数或者将单行或多行文本转换成命令行参数
    [hadoop@Hadoop ~]$ cat A | xargs #将A文件多行数据转换成单行输入,即将换行符替换为空格
    [hadoop@Hadoop ~]$ cat A | xargs -n 3#将A文件多行数据重新分割并按3个进行分组
    [hadoop@Hadoop ~]$ cat A | xargs -d i #指定分隔符为 i

     小提示:xargs 默认是以空白字符 (空格, TAB, 换行符) 来分割记录的, 因此文件名 file 1.log 被解释成了两个记录 file 和 1.log, 不幸的是 rm 找不到这两个文件.为了解决此类问题, 让 find命令在打印出一个文件名之后接着输出一个 NULL 字符 ('') 而不是换行符, 然后再告诉 xargs 也用 NULL 字符来作为记录的分隔符. 这就是 find 的 -print0 和 xargs 的 -0 的来历吧.


    sort和uniq

    [hadoop@Hadoop ~]$sort A #对A文件进行升序排序
    [hadoop@Hadoop ~]$sort -r A #对A文件进行逆序排序
    [hadoop@Hadoop ~]$sort -n A #对A文件按数字进行排序
    [hadoop@Hadoop ~]$sort -k 2 A #根据第二列进行排序


    uniq总是和sort一起使用,可以消除重复的行


    脚本文件参数

    $0 这个程式的执行名字
    $n 这个程式的第n个参数值,n=1..9
    $* 这个程式的所有参数,此选项参数可超过9个。
    $# 这个程式的参数个数
    $$ 这个程式的PID(脚本运行的当前进程ID号)
    $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
    $? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
    $- 显示shell使用的当前选项,与set命令功能相同
    $@ 跟$*类似,但是可以当作数组用
    展开全文
  • 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

    展开全文
  • shell脚本基本命令

    千次阅读 2018-08-20 22:08:50
    diff常用的参数 ... test命令的使用,&...两者的执行的效果完全相同,但直接输入脚本的绝对路径会默认从开始的第一行执行 适当的调整框架的大小以便整齐美观 ...
    • diff常用的参数

    `

    • sort常用的参数

    • test命令的使用,&&和||的使用

    两者的执行的效果完全相同,但直接输入脚本的绝对路径会默认从开始的第一行执行

    适当的调整框架的大小以便整齐美观

    • grep的基本使用方法

    ##有点小问题,等待解决

     

     

     

    小知识补充:

    使用这个语句类似c中的循环赋值一样对i从1到10依次赋值

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

    千次阅读 2019-06-06 22:47:59
    一.diff命令 diff 命令:是用来比较两个文件或目录的不同,并且是以行为单位来比对的。一般是用在 ASCII 纯文本文件的比对上。由于是以行为比对的单位,因此 diff 通常是用在同一文件(或软件)的新旧版本差异上...
  • Shell脚本基础及基本常用命令

    万次阅读 2018-06-16 11:10:07
    一、shell基本信息 1.概述 脚本语言(shell、python):解释性语言,用解释器解释 运行效率低 | c、java:描述性语言,运行效率高 #!/bin/bash 幻数 ,在脚本运行的时候先进行该程序 以.sh结尾会有高亮显示 ...
  • shell (计算机壳层) Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。...shell是一个命令语言解释器,它拥有自己内建的...
  • Shell脚本基本编辑规范及变量(详细)

    千次阅读 多人点赞 2020-12-16 01:50:27
    文章目录一、Shell脚本概述1、Shell脚本的应用场景 一、Shell脚本概述 1、将要执行的命令按顺序保存到一个文本文件 2、给该文件可执行权限 3、可结合各种Shell控制语句以完成更复杂的操作 1、Shell脚本的应用场景 ...
  • shell脚本中的sed命令用法

    千次阅读 2019-06-20 21:46:26
    Shell脚本sed命令 知识要点 sed命令的工作原理 sed的常用编辑命令 sed的替换命令 sed的特殊用法 sed命令的工作原理 sed是一种支持正则表达式的交互式流编辑器(stream editor) 脚本中修改文本或者文本...
  • 最近因为工作需要,需要编写shell脚本。编写大量shell脚本时,累计了大量经验,也让自己开始迷糊几种函数输出调用的区别。后面和前辈们请教了一下这个问题,大致明白了区别。这里分享给大家,希望对大家能有所收获。...
  • shell基本命令

    2018-01-10 15:41:52
    shell基本命令 在适合在vi或vim里写 运行。其中包含3种方法的99乘法表
  • linux--shell脚本常用脚本命令

    千次阅读 2018-06-14 22:39:03
    shell也是操作系统中的一个软件,他包含zailinux内核的外面,为了用户和内核之间的交互提供了一个接口系统中的命令用shell去解释shell接收到系统回应的输出并显示其到屏幕上什么是shell脚本?脚本是一种解释型语言 #...
  • Shell脚本中常用的命令(一)

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

    千次阅读 2017-10-18 09:29:37
    1.export命令 ...在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。同时,重要的一点是,export的效力仅及于该次登陆操作。注销或者重
  • linux系统中的shell脚本||脚本常用的命令

    万次阅读 多人点赞 2018-05-21 20:41:05
    脚本的编写 这里写代码片
  • 在写Shell脚本的过程中,掌握最基本的脚本语法,是完成Shell脚本的关键基础所在。但是,掌握Shell脚本的基础内容,也不是一蹴而就的!需要长期来练习,付出大量的时间与努力。(我也正在学习的路上…一起呗) 每天...
  • shell脚本之echo命令

    千次阅读 2016-04-06 11:48:39
    语 法:echo [-ne][字符串] / echo [--help][--version] 补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。...脚本测试示例: 测试结果:
  • shell脚本中,运行shell脚本命令;在Python命令行中,运行Python代码。然而,“python hello.py”是一个脚本命令,不是python代码。 因此,退出python命令行,直接cd到hello.py所在目录,运行python hello.py,...
  • 最近在处理一个 `Python` 局部变量的作用域问题...所以知识这个东西还是要不断“温故”,今天要总结的 `Shell` 脚本命令也是,基本属于一看就会,一写不对的状态,所以还是要把常用的操作总结到一起,方便查找和复习...
  • shell脚本快速执行命令

    千次阅读 2019-03-24 11:26:02
    shell脚本快速执行命令1.gnome-terminal2.基本用法3.启动后自动执行命令4.demo15.demo2 1.gnome-terminal 常用,置顶: gnome-terminal -x bash -c "子终端要执行的命令1;2;...." gnome-terminal -t "title-name" -x...
  • Shell脚本编程---基本脚本编译(一)

    千次阅读 2019-01-03 21:21:51
    一、多条shell命令的使用   [root@ceph01 ~]# date ; who Thu Jan 3 08:51:38 CST 2019 root pts/0 2019-01-03 08:50 (192.16.1.2)  其实这就是一个简单的脚本,date先执行输出然后执行who输出。在shell...
  • (5)eval 命令eval cmdLineeval会对后面的cmdLine进行两遍扫描,如果第一遍扫描后,cmdLine是个普通命令,则执行此命令;如果cmdLine中含有变量的间接引用,则保证间接引用的语义。1)eval也可以用于回显简单变量,...
  • Shell脚本的执行方式 Bash的基本功能 Bash的变量 Bash的运算符 环境变量配置文件 一、Shell概述 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户...
  • shell脚本命令解析过程】

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

    千次阅读 2018-08-24 18:06:59
    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shell脚本的世界吧。 到现在为止,你明白什么是shell...
  • Shell脚本的echo命令用法

    万次阅读 2014-11-26 22:08:53
    在使用shell脚本之前,我们是否应该先通俗的了解一下shell是什么呢?shell可以理解为命令解释器。我们知道,如果我们想要计算机去做一件事儿,就得告诉它。但是计算机内核不可能直接识别我们的命令,所以shell就是...
  • 1、命令行参数向shell脚本传递数据的最基本方式是使用命令行参数。 1)读取参数读取输入的参数的变量为位置参数,位置参数通过标准数字表示,其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为...
  • shell脚本基本语法详解

    万次阅读 多人点赞 2016-09-28 20:16:04
    编写shell脚本的时候,最前面要加上一行:#!/bin/bash,因为linux里面不仅仅只有bash一个解析器,还有其它的,它们之间的语法会有一些不同,所以最好加上这一句话,告诉系统要用这个解析器。一.shell变量shell变量和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,349
精华内容 55,339
关键字:

shell脚本基本命令