美文网首页NDKDNK 开发
Android NDK开发之旅32--NDK-Linux入门之s

Android NDK开发之旅32--NDK-Linux入门之s

作者: 小楠总 | 来源:发表于2017-04-11 20:42 被阅读337次

    Shell脚本

    当命令比较复杂的时候,就需要专门写一个脚本文件。

    bash、b shell实质是程序,我们写的命令通过它们翻译成Linux内核能够执行的指令。

    一个最简单的例子:

    #!/bin/bash
    
    #直接执行命令
    date
    who
    
    #创建变量,如果是字符串的话,有空格的一定要用双引号,否则会被解析成命令
    NDK=10
    text="i love you"
    
    #命令的执行结果作为变量的值,例如以当前时间作为文件名
    text1=`date`
    text2=$(who)
    
    #输出
    echo $NDK
    echo $text
    echo $text1
    echo $text2
    #字符串拼接,同理:有空格需要用双引号
    echo "$text very much"
    #如果需要输出$的话,需要使用转义字符
    echo "\$"
    

    输入输出重定向

    输出重定向

    命令的执行结果输出到文件,而不是命令行中
    ls -al > test.txt
    

    输入重定向

    wc命令是输出文本的行数,单词数,字节数
    wc < test.txt
    
    wc命令在命令行中的使用 wc << EOF 然后输入一些文本,最后输入一个EOF结束

    数学运算

    基本运算
    #1、使用命令,输出的结果作为c的值
    #注意除号左右两边要有空格
    c=$(expr $b / $a)
    #2、使用方括号运算符代替expr命令
    d=$[$b/$a]
    
    echo "c:$c"
    echo "d:$d"
    
    浮点数的处理

    基本运算不支持浮点数,为了支持浮点数,需要用bc命令:

    e=$(echo "scale=4; $a / 3" | bc)
    echo "e:$e"
    
    其中|是管道的意思,一个命令的输出作为另外一个命令的输入
    scale是自带的内建变量
    #内联输入重定向,多次运算的时候
    f=$(bc << EOF
    scale=4
    a1=($a * $b)
    a1 / 3
    EOF
    )
    

    命令退出的状态

    命令执行退出的状态:

    1. 0 成功
    2. 127 没有找到命令
    3. 1 未知错误
    4. 126 命令不可执行

    查看与退出状态指定:

    查看上一次命令的执行状态
    echo $?
    
    在shell脚本中,自己指定退出的状态
    exit 状态码
    

    if语句

    #!/bin/bash
    testuser=lady
    #查找passwd里面是否有对应的目录
    if grep $testuser /etc/passwd 
    then
        echo "ok"
        ls -a /home/$testuser/
    #如果passwd中没有目录,再判断是否有这个目录
    elif ls -d /home/$testuser
    then
        echo "用户不存在,主目录仍然存在"
    #其他情况   
    else
        #可以继续嵌套if
        #if 
        #then
        echo "$testuser not exist"
    fi
    
    grep命令是查找命令,例如查找test文本在test.txt中所在的行数:grep -n test test.txt
    可以结合test命令,如果条件成立,test命令以状态为0退出,if条件成立。

    test命令简单形式,用中括号,注意空格要加上,例子:

    比较大小:
    #!/bin/bash
    a=10
    b=5
    #test命令简单形式
    if [ $a -gt $b ]
    then
        echo "$a greater than $b"
    else
        echo "$a smaller than $b"
    fi
    

    test数值比较:

    1. -gt 大于
    2. -eq 等于
    3. -le 小于
    4. -ne 不等于
    判空:
    #!/bin/bash
    str1=""
    if [ str1 = "" ]                                                            
    then
        echo "有内容"
    else
        echo "没内容"
    fi
    

    test字符串比较:

    1. str1 == str2
    2. str1 != str2
    3. str1 < str2
    4. -n str1 长度是否非0
    5. -z str1 长度是否为0
    检查目录是否存在:
    #!/bin/bash
    mydir=/usr/jason
    #-d检查目录是否存在
    if [ -d $mydir ]
    then
        echo "$mydir exist"
        cd $mydir
        ls
    else
        echo "mydir not exist"
    fi
    

    test文件比较:

    1. -d 检查是否存在,并且是一个目录
    2. -e 检查file是否存在
    3. -f 检查是否存在,并且是一个文件
    4. -r 检查是否存在,并且可读,余此类推:-w、-x
    5. file1 -nt file2 file1比file2新
    6. file1 -ot file2 file1比file2旧
    多个条件的时候:
    #!/bin/bash
    #多个条件 []
    mydir=/usr/jason/shell
    #任意数学赋值或者比较表达式
    #if (( a++ > 90 ))
    if [ -d $HOME ] && [ -w $mydir ]
    then
        cd $mydir
        touch test5
    else
        echo "no"
    fi
    

    case语句

    基本格式是:

    case命令
    case 变量 in
    pattern1) 命令;;
    pattern2) 命令;;
    *) 默认命令;;
    esac
    

    例子:

    #!/bin/bash
    testuser=rose
    
    case $testuser in
    rose)
        echo "hi,$testuser";;
    ricky)
        echo "hello, ricky";;
    *)
        echo "defaults";;
    esac
    

    for循环

    基本格式:

    for命令
    for var in list
    do
        命令
    done
    

    例子1:

    #!/bin/bash
    
    for item in 1 2 3 4 5
    do
        echo $item
    done
    

    例子2:

    #使用字符串的时候一定要注意转义字符,\#、\'等
    list="windows--linux--macos"
    #IFS字段分隔符
    IFS=$--
    for item in $list
    do
        echo $item
    done
    

    While循环

    基本格式:

    while test command(或者[])
    do
        命令
    done
    

    例子:

    #!/bin/bash
    
    a=10
    while [ $a -gt 0 ]
    do
        echo "num:$a"
        #赋值不用使用$符号
        a=$[ $a - 1 ]
    done
    

    如果觉得我的文字对你有所帮助的话,欢迎关注我的公众号:

    公众号:Android开发进阶

    我的群欢迎大家进来探讨各种技术与非技术的话题,有兴趣的朋友们加我私人微信huannan88,我拉你进群交(♂)流(♀)

    相关文章

      网友评论

        本文标题:Android NDK开发之旅32--NDK-Linux入门之s

        本文链接:https://www.haomeiwen.com/subject/fmnuattx.html