Linux shell 编程-关于16进制

Linux shell 编程

在项目过程中,对方给了Linux下的操作指令,很是不方便。于是写了Linux的脚本,记录下编写过程中遇到和解决的问题。

  1. shell中设置变量的时候,要求等号“=”之间不要有空格

  2. 变量名$0是脚本名,$n(n>=1)表示传递给脚本的第n个参数

  3. 使用变量时需要加上$+变量名, 在字符拼接过程中为了确定变量名采用${变量名}

  4. ${#变量名} 这样就可以取到字符串的长度

  5. 变量的16进制转换的方式

    printf "%x" ${file_size}

  6. 在项目中需要进行对文件大小按16进制进行4k(0x1000)大小的对齐,由于脚本不熟悉,开始16进制运算不太会,于是采取了字符串+16进制组合的方法。首先将16进制数按字符串处理,分为从右向左的取字符串的低三位为低位,去除低三位后的字符串为高位,如果低位不等于000,则高位需要按16进制进行加一,代码如下:

    hex_size=43f1a0
    hexLow=${hex_size:0-3:3} #0-3表示从右向左的第三个字符开始,然后向右取3个字符
    hexHigh=${hex_size:0: ${#hex_size}-3} #从左开始,到 ${#hex_size}长度-3的位置		
    if [ "$hexLow" != "000" ]
    then
    	hexHigh=`printf "%x\n" $((16#$hexHigh+1))`
    fi		
    echo "align in base:${hexHigh}000"
    
    

    后来,发现既然能用 $((16#$hexHigh+1))于是就修改了方案:

    align_size=1000
    hex_size=43f1a0
    hexLow=`printf "%x\n" $((16#$hex_size % 16#$align_size))`  
    hexHigh=`printf "%x\n" $((16#$hex_size / 16#$align_size))`
    

    注意:$(( ))运算后得到的结果是10进制的,所以需要通过printf 转化为16进制。16#表示为16进制

  7. 如果需要替换文件中的内容,可以用:

    sed -i "s/{{hexBase}}/${hexHigh}/g" test.txt

    即将test.txt文本中{{hexBase}}字符串替换为${hexHigh}的内容

你可能感兴趣的:(shell,16进制,Tech)