• Shell脚本部分语法


    Shell中的变量
     
    Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看那系统变量
    系统变量:$HOME、$PWD、$SHELL、$USER等等

    显示当前shell中所有变量  :    set

     

    定义变量

    •变量=值 (例如STR=abc)
    •等号两侧不能有空格
    •变量名称一般习惯为大写
    •双引号和单引号有区别,双引号仅将空格脱意,单引号会将所有特殊字符脱意

    STR="hello world"

    A=9

    unset A 撤销变量 A

    readonly B=2 声明静态的变量 B=2 ,不能 unset

    export 变量名 可把变量提升为全局环境变量,可供其他shell程序使用

    将命令的返回值赋给变量
    A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
    A=$(ls -la) 等价于反引号
     
     
    Shell中的特殊变量
    •$? 表示上一个命令退出的状态
    •$$ 表示当前进程编号
    •$0 表示当前脚本名称
    •$n 表示n位置的输入参数(n代表数字,n>=1)
    •$#  表示参数的个数,常用于循环
    •$*和$@ 都表示参数列表 
     
     
     
    $*与$@区别
    •$* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号" "包含时,都以$1  $2  … $n 的形式输出所有参数
    •当它们被双引号" "包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数
     
     

    运算符

    格式 :expr m + n 或$((m+n)) 注意expr运算符间要有空格
    例如计算(2 +3 )×4 的值
     
    1.分步计算

      S=`expr 2 + 3`
      expr $S * 4

    2.一步完成计算

      expr `expr 2 + 3 ` * 4

      echo `expr \`expr 2 + 3\` * 4`

      或 $(((2+3)*4))

     
    for循环
    •第一种:

    for N in 1 2 3

    do

      echo $N

    done

    for N in 1 2 3; do echo $N; done

    for N in {1..3}; do echo $N; done

     
    •第二种:

    for ((i = 0; i <= 5; i++))

    do

      echo "welcome $i times"

    done

    for ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

     
     
    while循环
    •第一种

    while expression

        do

            command

            …

    done

    •第二种

    i=1

    while ((i<=3))

        do

          echo $i

           let i++

    done

     
     
    case语句
    •格式

    case $1 in

    start)

      echo "starting"

      ;;

    stop)

      echo "stoping"

      ;;

    *)

      echo "Usage: {start|stop} “

    esac

     
    read命令
     
    read -p(提示语句)-n(字符个数) -t(等待时间) 

      read -p "please input your name: " NAME 

     
    if判断
    •语法

    if condition 
    then 
        statements 
    [elif condition 
        then statements. ..] 
    [else 
        statements ] 
    fi

    例子

    #!/bin/bash

    read -p "please input your name:" NAME

    #printf '%s ' $NAME

    if [ $NAME = root ]

            then

                    echo "hello ${NAME},  welcome !"

            elif [ $NAME = itcast ]

                    then

                            echo "hello ${NAME},  welcome !"

            else

                    echo "SB, get out here !"

    fi

     
    判断语句
    •[ condition ] (注意condition前后要有空格)

    #非空返回true,可使用$?验证(0为true,>1为false)

    [ mike ]

    #空返回false

    [  ]

    l[ condition ] && echo OK || echo notok

      条件满足,执行后面的语句

     
    常用判断条件

    =字符串比较

    -lt小于

    -le小于等于

    -eq等于

    -gt大于

    -ge大于等于

    -ne不等于

     

    -r 有读的权限

    -w 有写的权限

    -x 有执行的权限

    -f 文件存在并且是一个常规的文件

    -s 文件存在且不为空

    -d 文件存在并是一个目录

    -b文件存在并且是一个块设备

    -L文件存在并且是一个链接

     
     
    Shell自定义函数
     
    l语法

     [ function ] funname [()]

    {

        action;

        [return int;]

    }

    function start()  / function start / start()

    •注意

    1.必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译

    2.函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

     
     
    脚本调试
     
    •sh -vx helloWorld.sh
    •或者在脚本中增加set -x
  • 相关阅读:
    HDU 多校对抗赛第二场 1010 Swaps and Inversions
    Android Tab -- 使用ViewPager、PagerTitleStrip/PagerTabStrip来实现
    Android Tab -- 使用ViewPager、Fragment、FragmentPagerAdapter来实现
    Android Tab -- 使用Fragment、FragmentManager来实现
    Android Tab -- 使用ViewPager、PagerAdapter来实现
    Android Tab -- 使用TabWidget、TabHost、TabActivity来实现
    Android Programming: Pushing the Limits -- Chapter 6: Services and Background Tasks
    Android Programming: Pushing the Limits -- Chapter 5: Android User Interface Operations
    Android Programming: Pushing the Limits -- Chapter 4: Android User Experience and Interface Design
    Android Programming: Pushing the Limits -- Chapter 3: Components, Manifests, and Resources
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/6665382.html
Copyright © 2020-2023  润新知