shell脚本运算
⑴ 1.linux系统下shell脚本用case语句编写四则运算 2.linux系统下shell脚本输入数字串。进行反序输出
如果只做四个简单的运算这应应该可以
shell脚本代码如下:
#!/bin/bash
read -p "input num1:" a
read -p "input num2:" b
read -p "input operator:" o
case $o in
+) let "res=a + b"
echo $res;;
-) let "res=a - b"
echo $res;;
/) awk 'BEGIN{printf "%.2f\n",'$a'/'$b'}';;
*) let "res=a * b"
echo $res;;
esac
⑵ shell中如何按位运算
语法
$((...))
$ echo $(( 3 * 4 )) 12
在某些场景特别方便,可以免去写程序的烦琐,如验证某些运算。
下面是验证《深入理解计算系统》练习题2.12的场景
表达式 ~0 将生成一个全1的掩码,不管机器的字大小是多少,可移植。
$ printf "%x\n" $(( ~0 ))ffffffffffffffff
$ printf "%#x\n" $(( ~0 ))0xffffffffffffffff
上面的测试显示,shell中,0按位取反后的值是64位的。
shell的printf命令前导字符打印:《shell脚本学习指南》表7-4:printf的标志中描述了格式参数中"#"号的意义,"#"可以用以输出前导"0x"(16进制)、"0"(8进制)
x & 0xFF 生成一个由x的最低有效字节组成的值
$ printf "%#x\n" $(( 0x89ABCDEF & 0xFF ))0xef
$ printf "%#.8x\n" $(( 0x89ABCDEF & 0xFF ))0x000000ef
以下x = 0x87654321
A.x的最低有效字节,其他位均置为0
$ printf "%#.8x\n" $(( 0x87654321 & 0xFF )) 0x00000021
$ printf "%#.8x\n" $(( 0x87654321 & ?0xFF ))-bash: 0x87654321 & ?0xFF : syntax error: operand expected (error token is "?0xFF ")
书中给出的练习题的答案是 “x & ?0xFF”,这里的"?"号经验证,shell无法正确运行。
B.除了x的最低有效字节外,其他的位置都取补,最低有效字节保持不变。
$ printf "%#x" $(( 0x87654321 ^ ~0xff))0xffffffff789abc21
上面因为~0xff会生成64位的掩码,所以结果有些不符合预期,但后32位是符合预期的。
C.x的最低有效字节设置成全1,其他字节都保持不变。
$ printf "%#x" $(( 0x87654321 | 0xff ))0x876543ff
⑶ 关于shell脚本语言中的运算问题!我想问一下i=43 echo $[i++] 则显示43为什么
shell本身就是个命令解释器
,不会编译成机器码
,
命令解释器这个名字就能解释你的问题了
"命令解释器用什么把
1++
算成2的"
我觉得你钻牛角尖了,
这是个黑箱
,shell作为命令解释器的存在,对各种输入都有对应的解释方式
,至于具体如何实现,那要看shell的源码了,
这是个黑箱情况
你的问题就好像c编译器如何识别
i++的
一样,只是不同的是
c编译器将i++生成机器码
,而shell内建$i++的处理方式
⑷ 怎么用shell编写计算1+2+3…+n
shell脚本部分:
ojbk
⑸ 如何做一个逻辑或运算的SHELL脚本
我试图做一个简单的状态检查,但它似乎并没有工作。 如果$#等于0或大于1然后打个招呼。 我曾尝试以下语法没有
if [ "$#" == 0 -o "$#" > 1 ] ; then
echo "hello"
fi
if [ "$#" == 0 ] || [ "$#" > 1 ] ; then
echo "hello"
fi
编辑:我这是bash的。
本文地址 :CodeGo.net/215809/
-------------------------------------------------------------------------------------------------------------------------
1. 这应该工作确定。
if [ "$#" == 0 ] || [ "$#" -gt 1 ] ; then
echo "hello"
fi
我不知道这是在其他shell不同,但如果你想<,>,你需要把它们的双括号里面,像这样:
if (("$#" > 1))
...
2. 此代码工作
#!/bin/sh
argc=$#
echo $argc
if [ $argc -eq 0 -o $argc -eq 1 ]; then
echo "foo"
else
echo "bar"
fi
我不认为SH支持“==”。使用“=”字符串和当量整数。
man test
更多的细节。
3. 你有没有试过这样的:
if [ $# -eq 0 ] || [ $# -gt 1 ]
then
echo "$#"
fi
⑹ shell脚本主要有哪些
第一个shell脚本程序:
#!/bin/bash
# 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行;echo "Hello, world!"
变量:
定义变量:
country="China"Number=100
注意: 1,变量名和等号之间不能有空格;
2,首个字符必须为字母(a-z,A-Z)。
3, 中间不能有空格,可以使用下划线(_)。
4, 不能使用标点符号。
5, 不能使用bash里的关键字(可用help命令查看保留关键字)。
使用变量:
只需要在一个定义过的变量前面加上美元符号$就可以了, 另外,对于变量的{} 是可以选择的, 它的目的为帮助解释器识别变量的边界.
country="China"echo $countryecho ${country}echo "I love my ${country}abcd!"
#这个需要有{}的;
重定义变量:直接把变量重新像开始定义的那样子赋值就可以了:
country="China"country="ribenguizi"
只读变量: 用 readonly 命令 可以把变量字义为只读变量。
readonly country="China"#或
country="China"readonly country
删除变量: 使用unset命令可以删除变量,但是不能删除只读的变量。用法:
unset variable_name
变量类型
运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
特殊变量:
其中, 1. 取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。2. 如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
⑺ shell 脚本里的变量怎么加1
shell 脚本里变量加一方式如下六种:
1、第一种整型变量自增方式
a=$(($a+1))
echo$a
2、第二种整型变量自增方式a=$[$a+1]
echo$a
a=`expr$a+1`
echo$a
leta++
echo$a
5、第五种整型变量自增方式leta+=1
echo$a
6、第六种整型变量自增方式((a++))
echo$a
(7)shell脚本运算扩展阅读:
基本上shell分两大类:
1、图形界面shell(Graphical User Interface shell 即 GUI shell)
应用最为广泛的 Windows Explorer (微软的windows系列操作系统),还有也包括广为人知的 Linux shell,其中linux shell 包括 X window manager (BlackBox和FluxBox),以及功能更强大的CDE、GNOME、KDE、 XFCE。
2、命令行式shell(Command Line Interface shell ,即CLI shell)
bash / sh / ksh / csh / zsh(Unix/linux 系统),cmd.exe/ 命令提示字符(Windows NT 系统),Windows PowerShell(支持 .NET Framework 技术的 Windows NT 系统),传统意义上的shell指的是命令行式的shell,以后如果不特别注明,shell是指命令行式的shell。
⑻ shell脚本计算时间
TIME_INPUT=`date -d "00:00" +%s`
通过时间戳来计算
nowtime=`date +%s`
shijiancha=`expr $nowtime - $TIME_INPUT`
if [ $shijiancha -gt 180 ];then
echo 3分钟前
else
if [ $shijiancha -lt -180 ];then
echo 3分钟后
fi
fi
⑼ shell脚本中如何处理浮点运算
$ echo "scale=3; 1/13" | bc
.076
$ echo "1 13" | awk '{printf("%0.3f\n",$1/$2)}'
0.077