• shell入门


    1.变量

    1)定义变量
    slbl=hb  //变量名只能用字母数字下划线
    for filename in `ls /etc` // 赋值为/etc下所有文件名
    for filename in $(ls /etc)
    2)使用变量
    echo ${slbl} 或 echo $slbl //输出变量
    
    for skill in Ada Coffe Action Java; do
        echo "I am good at ${skill}Script"
    done
    //循环输出变量
    
    3)只读变量
    readonly zdbl  //变量值不能修改
    
    4)删除变量
    unset slbl
    
    
    shell字符串
    //字符串有单引号和双引号 单引号里不能加转义符 双引号里面可以
    str1='hb'
    str2="hb"$str1"!"
    echo ${#str1}    //获取字符串长度
    echo ${str2:1:4} //截取下标1长度4字符串
    echo `expr index "$str2" io` //获取字符串中字符i或o第一个出现的下标
    
    
    shell数组
    array_name=(value0 value1 value2 value3)或
    array_name[0]=value0
    array_name[1]=value1
    array_name[n]=valuen
    
    valuen=${array_name[n]}//读取数组
    length=${#array_name[@]}//取得数组元素的个数
    或者
    length=${#array_name[*]}
    lengthn=${#array_name[n]}//取得数组单个元素的长度
    ${my_array[*]}  //数组所有元素
    或${my_array[*]}


     

    2.传递参数

    ./xx.sh 1 2 3  //执行脚本时加上参数
    脚本中echo $0  //$0是脚本名称xx.sh
    echo $1  //$1是第一个参数1 $2 $3等依此类推
    $#   //参数个数 这里是3
    $*    //以一个字符串显示所有参数 空格隔开
    $@   //以多个字符串形式显示参数
          例:  echo "-- $@ 演示 ---"
        for i in "$@"; do
            echo $i
        done

    3.基本运算符

    1)算数运算expr
    val=`expr 2 + 2`  //expr 表示计算 2与+间要有空格 ``是反引号不是''
    例:`expr $a + $b`  //加法
        `expr $a - $b`    //减法
        `expr $a * $b`    //乘法 乘法需要用转意符
        `expr $b / $a`     //除法
        `expr $b % $a`    //取余
        a=$b                    //赋值
        [ $a == $b ]         //判断是否相等
        [ $a != $b ]            //判断是否不相等
    
    
    2)关系运算    //只支持数字 不支持字符串
    [ $a -eq $b ]     //是否相等
    [ $a -ne $b ]    //是否不相等
    [ $a -gt $b ]    //是否大于
    [ $a -lt $b ]    //是否小于
    [ $a -ge $b ]    //是否大于等于
    [ $a -le $b ]     //是否小于等于
    
    
    3)字符串运算    //支持字符串
    [ $a = $b ]     //是否相等
    [ $a != $b ]     //是否不相等
    [ -z $a ]         //字符串长度是否为0 0返回true
    [ -n "$a" ]     //字符串长度是否不为0 不为0返回true
    [ $a ]             //字符串是否为空 不为空返回true
    
    
    4)逻辑运算符
    [[ $a -lt 100 && $b -gt 100 ]]     //&&与
    [[ $a -lt 100 || $b -gt 100 ]]       //||或
    
    
    5)文件测试运算符 (是返回true)
    [ -b $file ]    //文件是否是块设备文件
    [ -c $file ]     //文件是否是字符设备文件
    [ -d $file ]   //文件是否是目录
    [ -f $file ]     //文件是否是普通文件(既不是目录,也不是设备文件)
    [ -g $file ]    //文件是否设置了 SGID 位
    [ -k $file ]    //文件是否设置了粘着位(Sticky Bit)
    [ -p $file ]    //文件是否是有名管道
    [ -u $file ]    //文件是否设置了 SUID 位
    [ -r $file ]    //文件是否可读
    [ -w $file ]    //文件是否可写
    [ -x $file ]    //文件是否可执行
    [ -s $file ]     //文件是否为空(文件大小是否大于0)
    [ -e $file ]     //文件(包括目录)是否存在
        

    4.test命令  

    //用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
    
    1)数值测试(只适用于数字对比)
    -eq    //等于则为真
    -ne    //不等于则为真
    -gt    //大于则为真
    -ge    //大于等于则为真
    -lt    //小于则为真
    -le    //小于等于则为真
    例:     if test $[num1] -eq $[num2]
        then
            echo '两个数相等!'
        else
            echo '两个数不相等!'
        fi
    
    
    2)字符串测试(只适用于字符串对比)
    =    //等于则为真
    !=    //不相等则为真
    -z 字符串    //字符串的长度为零则为真
    -n 字符串    //字符串的长度不为零则为真
    例:    if test $num1 = $num2
        then
            echo '两个字符串相等!'
        else
            echo '两个字符串不相等!'
        fi
    
    
    3)文件测试
    -e 文件名    //如果文件存在则为真
    -r 文件名    //如果文件存在且可读则为真
    -w 文件名    //如果文件存在且可写则为真
    -x 文件名    //如果文件存在且可执行则为真
    -s 文件名    //如果文件存在且至少有一个字符则为真
    -d 文件名    //如果文件存在且为目录则为真
    -f 文件名    //如果文件存在且为普通文件则为真
    -c 文件名    //如果文件存在且为字符型特殊文件则为真
    -b 文件名    //如果文件存在且为块特殊文件则为真
    例:if test -e ./bash
        then
            echo '文件已存在!'
        else
            echo '文件不存在!'
        fi

    5.shell流程控制

    1)if
    例:
        if [ $(ps -ef | grep -c "ssh") -gt 1 ]
        then 
            echo "true" 
        elif        
            echo "xx"
        else
            echo "xxx"
        fi
    
    
    2)for循环
    例:
    for loop in 1 2 3 4 5
    do
        echo "The value is: $loop"
    done
    
    
    3)while循环
    例:
    int=1
    while(( $int<=5 ))
    do
        echo $int
        let "int++"
    done
    
    
    4)until循环 
    //until 循环执行一系列命令直至条件为 true 时停止。
    //false继续执行 与while相反
    例:
    a=0
    until [ ! $a -lt 10 ]
    do
       echo $a
       a=`expr $a + 1`
    done
    
    
    5)case
    //case匹配某一项执行
    例:
    echo '输入 1 到 4 之间的数字:'
    echo '你输入的数字为:'
    read aNum
    case $aNum in
        1)  echo '你选择了 1'
        ;;
        2)  echo '你选择了 2'
        ;;
        3)  echo '你选择了 3'
        ;;
        4)  echo '你选择了 4'
        ;;
        *)  echo '你没有输入 1 到 4 之间的数字'
        ;;
    esac

    6.函数

    例:
    demoFun(){
        echo "这是我的第一个 shell 函数!"
    }
    echo "-----函数开始执行-----"
    demoFun
    echo "-----函数执行完毕-----"
    
    还有几个特殊字符用来处理参数
    $#    //传递到脚本或函数的参数个数
    $*    //以一个单字符串显示所有向脚本传递的参数
    $$    //脚本运行的当前进程ID号
    $!    //后台运行的最后一个进程的ID号
    $@    //与$*相同,但是使用时加引号,并在引号中返回每个参数。
    $-    //显示Shell使用的当前选项,与set命令功能相同。
    $?    //显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    7.输入输出重定向

    以下的>>//合并原文件
    和>//覆盖原文件
    可以替换
    
    1)输出重定向    //输出到文件中
    $ echo "菜鸟教程:www.runoob.com" > users
    $ cat users
    菜鸟教程:www.runoob.com
    
    如果不希望文件内容被覆盖,可以使用 >> 追加到文件末尾,例如:
    $ echo "菜鸟教程:www.runoob.com" >> users
    $ cat users
    菜鸟教程:www.runoob.com
    菜鸟教程:www.runoob.com
    
    
    2)输入重定向    //从文件获取输入
    例://统计users文件行数
    wc -l users 或 wc -l < users
    
    
    3)输出错误文件
    command 2>>file  //输出错误文件 2表示错误文件 1输出文件 0输入文件
    command >> file 2>&1    //将 输出文件 和 错误文件 合并后重定向到file
  • 相关阅读:
    无人机一体化时空信息采集服务平台
    行业大秀:EasyEarth Show!
    EasyEarth三维可视化解决方案——智慧林业
    DJI Terra+EasyEarth让数据获取与应用无缝衔接
    无人机一体化3DGIS服务平台
    EasyEarth三维可视化解决方案——智慧园区
    【闲谈】如何统计字符串中出现最多的字母与个数
    嗨:说您呢,循环了解一下
    状态模式与策略模式
    一次异步处理
  • 原文地址:https://www.cnblogs.com/hbhb/p/14272991.html
Copyright © 2020-2023  润新知