shell脚本之位运算+for循环+返回值承接

用shell脚本实现某个寄存器的某几位设置

坑位1:

开发板上不认(ubuntu上可以)

for (( i=0;i<6;i++ ))

do

done

换成:

for i in `seq 0 6`

do

done

坑位2:

返回值承接用#?时默认只截取低8位

setbits  $1 $2 $3 $4regv=$?printf "regv= %#x\n" $regv
发现只剩低八位

所以,换种承接方式吧:
 regv=`regread $1`
这种方式是直接将命令执行或在屏幕上输出的东西接过来,是字符串。

坑位3:

如上面,reg=`regread $1`得到的字符串若用printf  "%d" 是打印不到的,直接echo才行

坑位4:

reg=setbits $1 $2 $3 $4 这种方式来承接会爆语法错误,不是C语言。

最终测试成功,如下:

#######################################################
#  test the sar-adc in SOC
#######################################################                                              

regwrite()
{
        devmem $1 32 $2
}                                                                                                    

regread()
{
        devmem $1
}                                                                                                    

##argv[1] :origin data
##argv[2] :start bit
##argv[3] :end bit
##argv[4] :result
setbits()
{
        value=$1
        for i in `seq $2 $3`
        do
                mask=$(( 0x1 << $i ))
                #printf "mask = %#x\n" $mask
                value=$(( $value & ~$mask ))
                #printf "clean bit %d value = %#x\n" $i $value
                mask1=$(( 0x1 << ($i - $2) ))
                #printf "mask1 = %#x\n" $mask1
                bitv=$(( $4 & mask1 ))
                #printf "bitv = %#x\n" $bitv
                value=$(( $value | ($bitv << $2)  ))
                #printf "set bit %d value = %#x\n" $i $value
        done
                printf "%#x\n" $value
                return $value
}                                                                                                    

reg_set_bits()
{
        regv=`regread $1`
        regv=`setbits $regv $2 $3 $4 `
        regwrite $1 $regv
}                                                                                                    

reg_set_bits $1 $2 $3 $4

  

原文地址:https://www.cnblogs.com/xxg1992/p/9090339.html

时间: 2024-10-08 08:15:46

shell脚本之位运算+for循环+返回值承接的相关文章

Shell脚本的条件控制和循环语句

条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expression 和方括号([ ])之间必须有空格,否则会有语法错误. if 语句通过关系运算符判断表达式的真假来决定执行哪个分支.Shell 有三种 if ... else 语句: if ... fi 语句 if ... else ... fi 语句 if ... elif ... else ... f

shell脚本修改json中某个字段的值

shell脚本修改json中某个字段的值 思路:通过awk来找到旧数据,然后用sed来替换旧数据 源码 config.json { "name": "the_name", "id": "132869", "content_url": "https://hot.example.com/", "enable_feature1": "true", &qu

Linux | shell脚本-条件判断if和循环语句for

一.简介 上个章节中,我们学习了判断语句和运算语句.shell脚本中,这些判断语句一般都是和if.else.elif.for和while等语句一起使用. 在脚本编写中,条件判断语句常常用于多种情况的判断,符合哪一种情况就执行哪一种的命令. 二.shell条件判断语句:if 1.流程控制:if单分支结构 语法: if 条件判断:then 条件判断成功时执行的操作 ... fi 例子: 结合整数值比较-eq:检查主机是否在线 vim test1.sh运行结果:2.流程控制:if双分支结构 语法: i

Linux - Shell - 算数表达式 - 位运算

概述 shell 中基于 $(()) 的 位运算 背景 复习 shell 脚本 凑数吧 准备 环境 os centos7 1. 位运算 代码 #!/bin/bash # 位运算 arg1=2 arg2=8 # 位运算 # 1. << var1=$((arg1 << 2)) echo $var1 # 2. >> var2=$((arg1 >> 1)) echo $var2 # 3. & var3=$((arg1&arg2)) echo $var

Shell脚本之for、while循环语句和case分支语句

shell作为一种脚本编程语言,同样包含循环.分支等其他程序控制结构,从而轻松完成更加复杂.强大的功能 使用for循环语句 在工作中,经常遇到某项任务需要多次执行,而每次执行仅仅是处理对象不一样,其他命令都相同.使用简单的if语句已经难以满足要求,编写全部代码将困难重重,而for循环语句将很好的解决类似的问题 1. for语句的结构 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令,直到变量值用完退出循环 案例1:根据姓名列表批量建立用户 [[ema

shell脚本编程学习笔记-while循环

1.当型循环和直到型循环 While使用的不多,一般守护进程程序或始终循环执行会用,其他循环运算都用for代替. 1.1 当型和直到型循环语法 (1)while条件语句 语法: While 条件 do 指令-. done 手机充值:发短信扣费,充值100,每次扣1角5,当费用低于1角5分就不能发了. (2)until条件语句 语法: until 条件 do 指令- Done 提示:只循环一次,应用场景不多,了解就好. 1.2 当型和直到型循环基本范例 休息命令:sleep休息1秒,usleep1

Shell脚本 (三)for循环 while循环 case分支语句

################for循环语句的结构#############使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环.在这里,取值表 称为for语句的执行条件,其中包括多个属性相同的对象.需要预先指定(如通讯录.IP黑名单)·语法样式for 变量名 in 取值列表do 命令序列done·#####for循环语句列子####需求:根据人事部门给出的员工姓名拼音列表,在Linux服务器中添加相应的用户账号,初始密码均设

5、位运算和循环

一.上一个内容的复习 1.关系运算符.逻辑运算符(多个表达式的逻辑判断) 2. 短路的与或 3.条件运算符,用来做赋值操作 4.位运算符:对表达式以二进制位单位进行运算 十进制和二进制的转化 二.位运算符: &按位与(先把数字计算成二进制的数,然后从右开始向做写,然后比对每一位的数值,有0就是0) |按位或(先把数字计算成二进制的数,然后从右开始向做写,然后比对每一位的数值,有1就是1) ^按位异或(先把数字计算成二进制的数,然后从右开始向做写,然后比对每一位的数值,相同为0,不同为1) <

shell脚本基础 数值运算 判断 及if语句

数值运算 整数运算[三种,随便掌握一种即可]expr 数字 运算符 数字 [[email protected] ~]# expr 1 + 1(运算符号都是+ - * / 注:*需要\*.%是取余,余数只有0 1 2)2[[email protected] ~]# expr 45 \* 145 echo$[数字 运算符 数字][[email protected] ~]# echo $[89*89+454848*874851]397924235569 leti++ == i=i+1i+=2 == i