博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux shell 编程-关于16进制
阅读量:5859 次
发布时间:2019-06-19

本文共 1061 字,大约阅读时间需要 3 分钟。

  hot3.png

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=1000hex_size=43f1a0hexLow=`printf "%x\n" $((16#$hex_size % 16#$align_size))`  hexHigh=`printf "%x\n" $((16#$hex_size / 16#$align_size))`
注意:$((  ))运算后得到的结果是10进制的,所以需要通过printf 转化为16进制。16#表示为16进制
  1. 如果需要替换文件中的内容,可以用: sed -i "s/{
    {hexBase}}/${hexHigh}/g" test.txt
    即将test.txt文本中{
    {hexBase}}字符串替换为${hexHigh}的内容

转载于:https://my.oschina.net/felony/blog/2995678

你可能感兴趣的文章
kali linux常用wifi攻击工具
查看>>
JS字符串数组转换
查看>>
2019年全国统一高考数学试卷理科新课标Ⅲ
查看>>
VBScript:写excel的例子
查看>>
SpringMVC(十二)自定义异常处理器 HandlerExceptionResolver(接口)
查看>>
接口测试(一)--基础知识
查看>>
lombok 介绍及基本使用方法
查看>>
实验一 巩耀阳 201421430029
查看>>
Inkpad绘图原理浅析
查看>>
043_关于Salesforce集中权限的解释
查看>>
TYVJ P1077 有理逼近 Label:坑,tle的好帮手 不懂
查看>>
相对路径和绝对路径
查看>>
java线程面试题摘要
查看>>
Vue 给axios做个靠谱的封装(报错,鉴权,跳转,拦截,提示)
查看>>
asp.net SqlParameter关于Like的传参数无效问题
查看>>
Python多线程练习
查看>>
Raspberry pi experiment
查看>>
C语言qsort快速排序
查看>>
bzoj1009
查看>>
bzoj3157 3516
查看>>