zoukankan      html  css  js  c++  java
  • Shell 脚本语法

    语法:

    1. echo "Hello World !" //echo 命令用于向窗口输出文本

    2.your_name="runoob.com" //变量名定义,变量名和等号之间不能有空格

    命名规则:
    命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
    中间不能有空格,可以使用下划线(_)。
    不能使用标点符号。
    不能使用bash里的关键字(可用help命令查看保留关键字)

    3.使用变量 加$ ,加花括号是为了帮助解释器识别变量的边界
    echo ${your_name}

    4.只读变量 readonly
    readonly myUrl

    5.删除变量 unset ,不能删除只读变量
    unset your_name


    6.变量类型
    1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
    2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
    3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行


    二 字符串
    1.单引号 双引号区别

    双引号内可以引用变量
    双引号内可以出现转义字符

    2.获取字符串长度
    string="abcd"
    echo ${#string}

    3.提取子字符串
    string="runoob is a great site"
    echo ${string:1:4} //输出 unoo

    4.查找子字符串
    查找字符i或o 位置,谁先出现就计算哪个

    string="runoob is a great site"

    echo `expr index "$string" io` //`是反引号

    三 数组

    只支持一位数组
    1.array=(value1 value2 value3)

    array=(
    value1
    value2
    value3
    )

    2.数组读取
    value1=${array[1]}

    使用 @ 符号可以获取数组中的所有元素

    3.获取数组的长度
    length=${#array[@]} 或者 length=${#array[*]}
    lengthn=${#array[n]} //获取下标位n元素长度

    四、shell 注释

    1.#开头 行注释
    2. 多行注释
    :<<EOF
    注释内容
    注释内容
    注释内容
    EOF

    五、shell传递参数

    向脚本传递参数,脚本内获取参数的格式为:$n

    $# :传递到脚本的参数个数
    $* :以一个单字符串显示所有向脚本传递的参数
    $@ :与$*相同,但是使用时加引号,并在引号中返回每个参数。

    六、Shell基本运算符
    .expr 表达式
    val=`expr 2 + 2`
    echo "两数之和为 : $val"
    注意:
    表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
    完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边

    1.算数运算符
    + `expr $a + $b`
    -
    * `expr $a * $b`
    / `expr $b / $a`
    % `expr $b % $a`
    =
    == [ $a == $b ] 返回true,false
    != [ $a != $b ]

    条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。

    2.关系运算符
    -eq :[ $a -eq $b ] 返回true或者false
    -ne
    -gt 检测左边数大于右边
    -lt
    -ge 检测左边数大于等于右边
    -le

    3.布尔运算符
    ! 非 [ !false ]
    -o 或 [ $a -lt 20 -o $b -gt 100 ]
    -a 与 [ $a -lt 20 -a $b -gt 100 ]

    4.逻辑运算符
    $$ 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]]
    || 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]]

    5.字符串运算符

    = [ $a = $b ]
    !=
    -z [ -z $a ] //检测字符串长度是否为0,为0返回 true
    -n [ -n "$a" ] //检测字符串长度是否为0,不为0返回 true
    $ [ $a ] //检测字符串是否为空,不为空返回 true。

    6.文件测试运算符
    -b file [ -b $file ] //检测文件是否是块设备文件,如果是,则返回 true。
    -c file //检测文件是否是字符设备文件,如果是,则返回 true。
    -d file //检测文件是否是目录,如果是,则返回 true。
    -f file //检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
    -g file //测文件是否设置了 SGID 位,如果是,则返回 true。
    -k file //检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
    -p file //检测文件是否是有名管道,如果是,则返回 true。
    -u file //检测文件是否设置了 SUID 位,如果是,则返回 true。
    -r file //检测文件是否可读,如果是,则返回 true。
    -w file //检测文件是否可写,如果是,则返回 true。
    -x file //检测文件是否可执行,如果是,则返回 true。
    -s file //检测文件是否为空(文件大小是否大于0),不为空返回 true。
    -e file //检测文件(包括目录)是否存在,如果是,则返回 true。


    七 echo命令
    1.echo "It is a test"

    2.echo ""It is a test""

    3.显示变量
    read name
    echo "$name It is a test"

    4显示换行
    echo -e "OK! " // -e 开启转义
    echo -e "OK! c" // c 不换行

    5显示结果定向至文件
    echo "It is a test" > myfile

    6 显示命令执行结果
    echo `date`

    八 printf 命令

    printf format-string [arguments...]

    九 流程控制
    1.if else 语句

    if condition
    then
    command1
    command2
    ...
    commandN
    else
    command
    fi

    2.if else-if else
    if condition1
    then
    command1
    elif condition2
    then
    command2
    else
    commandN
    fi

    3.if else语句经常与test命令结合使用
    num1=$[2*3]
    num2=$[1+5]
    if test $[num1] -eq $[num2]
    then
    echo '两个数字相等!'
    else
    echo '两个数字不相等!'
    fi

    4.for循环
    for var in item1 item2 ... itemN
    do
    command1
    command2
    ...
    commandN
    done

    5. while 语句

    while condition
    do
    command
    done

    int=1
    while(( $int<=5 ))
    do
    echo $int
    let "int++"
    done

    6.until 循环 //until 循环与 while 循环在处理方式上刚好相反
    until condition
    do
    command
    done

    7.case 语句
    case 值 in
    模式1)
    command1
    command2
    ...
    commandN
    ;;
    模式2)
    command1
    command2
    ...
    commandN
    ;;
    esac

    8.跳出循环 break和continue。

    十 函数
    1.自定义函数
    [ function ] funname [()]

    {

    action;

    [return int;]

    }
    1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
    2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

    funWithReturn(){
    echo "两个数字分别为 $1 和 $2 !" //当n>=10时,需要使用${n}来获取参数
    return $(($1+$2))
    }
    funWithReturn 1 2
    echo "输入的两个数字之和为 $? !"


    函数返回值在调用该函数后通过 $? 来获得。

    注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

  • 相关阅读:
    列表标签
    超链接标签
    HTML:如何把一个无序列表转换成横向菜单
    window界面控制
    C++文件读写
    宽度,对齐方式的设置
    取出一个整数的每一位
    求两个数的最大公约数
    判断素数
    天才ACM ---待复习标志
  • 原文地址:https://www.cnblogs.com/catluo/p/11730378.html
Copyright © 2011-2022 走看看