zoukankan      html  css  js  c++  java
  • shell基础

    shell

    1、shell中的特殊变量

    1-1、特殊变量

    1-2、$* 和 $@

    $* 和 $@ 的区别为: $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。

    1-3、$?

    $? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。

    2、echo 的选项

    2-1、-e

    用后面的内容对转义字符进行替换

    例:echo -e "\"                                                  结果:

             echo -e "\\"                                              结果:

             echo -e "1abc\de\2fgh\\ijklmn"      结果:1abcde2fghijklmn

    2-2、-n

    禁止插入换行符(包括echo自带的换行符也将失效)

    2-3、-E

    禁止转义字符,但对"\"无效

    3、变量

    3-1、只读变量

    readonly 变量

    3-2、删除变量

    unset 变量

    4、替换

    4-1、命令替换

    把一个命令的输出赋值给一个变量,方法为把命令用反引号(在Esc下方)引起来

    例:

    result=`pwd`

    echo $result

    结果:

    /home/sl

    4-2、变量替换

    5、运算符

    5-1、算术运算符

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr. 下面使用expr进行;  expr是一款表达式计算工具,使用它可以完成表达式的求值操作;

    注意:

             1. 在expr中的乖号为:*

             2. 在 expr中的 表达式(或者变量)与运算符之间要有空格,否则错误;

             3. 在[ $a == $b ]与[ $a != $b ]中,要需要在方括号与变量以及变量与运算符之间也需要有空格, 否则为错误的。

             4、表达式必须用反引号括起来

    5-2、关系运算符

    5-3、布尔运算符

    5-4、字符串运算符

    5-5、文件测试运算符

    6、字符串

    6-1、单引号的限制:

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
    • 双引号里可以有变量
    • 双引号里可以出现转义字符

    6-2、双引号的优点:

    6-3、字符串操作

    1、字符串长度

    ${#str}

    2、子串

    ${str:1:4}

    3、字符串是否包含子串

    expr index "$str" substr

    4、路径字符串

    4-1、basename

    得到文件名

    例:

    result=`basename /home/sl/a.sh`

    echo $result

    结果:a.sh

    result=`basename /home/sl `

    echo $result

    结果:sl

    4-2、dirname

    得到路径名

    例:

    result=`basename /home/sl/a.sh`

    echo $result

    结果:/home/sl

    result=`basename /home/sl `

    echo $result

    结果:/home

    7、数组

    7-1、定义

    1、在shell中用括号表示数组,元素用空格分开

    2、下标从0开始,可以使用不连续的下标,而且下标的范围没有限制,但不许是自然数

    7-2、读取数组的全部元素,用@或*

    ${array_name[*]}或者${array_name[@]}

    7-3、数组的长度

    ${#array_name[*]}或者${#array_name[@]}

    7-4、获取数组的所有下标

    ${!array_name[*]}或者${#array_name[@]}

    7-5、获取数组元素的长度

    ${#array_name[i]}

    8、函数

    8-1、printf

    • printf 命令不用加括号
    • format-string 可以没有引号,但最好加上,单引号双引号均可。
    • 参数多于格式控制符(%)时,format-string 可以重用,可以将所有参数都转换。
    • arguments 使用空格分隔,不用逗号。
    Ø  如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替

    8-2、exit

    退出shell

    8-3、read

    从键盘读取

    -p:输入提示

    -t:输入等待计时

    -n:输入字符个数控制

    -s:输入不显示在监视器上(实际上数据是显示的,只是read命令将文本颜色设置成与背景相同的颜色)

    read line:读文件

    • 可以使用read命令读取Linux系统上的文件。
      每次调用read命令都会读取文件中的"一行"文本。当文件没有可读的行时,read命令将以非零状态退出。
      读取文件的关键是如何将文本中的数据传送给read命令。
      最常用的方法是对文件使用cat命令并通过管道将结果直接传送给包含read命令的while命令

    #!/bin/bash

    count=1    //赋值语句,不加空格

    cat test | while read line        //cat 命令的输出作为read命令的输入,read读到的值放在line中

    do

       echo "Line $count:$line"

       count=$[ $count + 1 ]          //注意中括号中的空格。

    done

    echo "finish"

    exit 0

    8-4、

    9、语句

    9-1、if语句

    if [ 表达式] then 语句  elif[ 表达式 ] then 语句 elif[ 表达式 ] then 语句   ……else 语句 fi

    例:

    if [ $a == $b ]

         then

             echo "a等于b"

    else

         echo "a!=b"

    fi

    或者

    if [ $a == $b ]; then echo "a==b"; else echo "a!=b"; fi;

    9-2、case语句

    取值后面必须为关键字 in,每一模式必须以右括号结束。

    ;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。2. 如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

    read -t 30 -p "please input your digit:" a

    case $a in

    1)

         echo "a==1";;

    2)

         echo "a==2";;

    3)

         echo "a==3";;

    *)

         echo "a > 3";;

    esac

    9-3、循环语句

    1、for

    for 变量 in 列表
    do
        ……
    done
    列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。
    for FILE in $HOME/*.sh
    do
       echo $FILE
    done

    2、while

    while command
    do
       Statement(s) to be executed if command is true
    done
    i=0
    while [ $i -lt 5 ]
    do
        i=`expr $i+1`
        echo $i
    done

    3、until

    until command
    do
    ……
    done

    command 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

    until [ $i -gt 10 ]

    do

         echo $i

         i=`expr $i + 1`

    done

    10、函数

    1、定义

    function_name () {
        list of commands
        [ return value ]
    }

    也可以加上function关键字:

    function function_name () {
        list of commands
        [ return value ]
    }

    1. 调用函数只需要给出函数名,不需要加括号。

    2. 函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值。

    3. Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。

    4. 函数的参数可以通过 $n

    5、定义的时候不用写参数

    2、调用

    function_name 参数列表(空格分开)

    3、删除函数

    unset .f function_name

    11、引入外部脚本

    . filename
    #或
    source filename

    1. 两种方式的效果相同,简单起见,一般使用点号(.),但是注意点号(.)和文件名中间有一空格。

    2. 被包含脚本不需要有执行权限。

  • 相关阅读:
    Java 基础(六):循环
    Java基础(五):数组
    Java 基础(四):从面试题看String
    Java Grammar(二):运算符
    「每日五分钟,玩转JVM」:指针压缩
    一份让你效率翻倍的年终总结
    「每日五分钟,玩转 JVM」:GC 概览
    「每日五分钟,玩转JVM」:对象内存布局
    「每日五分钟,玩转JVM」:对象从哪来
    Azure Web App (二)使用部署槽切换部署环境代码
  • 原文地址:https://www.cnblogs.com/archimedes-euler/p/9970366.html
Copyright © 2011-2022 走看看