shell学习之路--操作符和数字常量

目录

一、操作符 Operators

二、操作优先级  Operator Precedence

三、数字常量 Numerical Constants


一、操作符 Operators

1.赋值 Assignment

1.1 = 等号 Equal

 1.1.1 变量赋值  Variable Assignment

 [root@server1 ~]# a=28

 [root@server1 ~]# echo $a

 28

1.1.2 字符串比较操作 String comparison operator

 a. if [ “$string1” = “$string2” ]

 b. if [ “X$string1”  = “X$string2” ]

 then

  command

 fi

2.算术操作符  Arithmetic Operators

+

加法计算

Plus

-

减法计算

Minus

*

乘法计算

Multiplication

/

除法计算

Division

**

幂运算

Exponentiation

%

模运算,求余运算

返回一次除法运算的余数modulo

+=

加等于

把变量的值增加一个常量然后再把结果赋给变量

-=

减等于

把变量的值减去一个常量然后再把结果赋给变量

*=

乘等于

先把变量的值乘以一个常量的值,然后再把结果赋给变量

/=

除等于

先把变量的值除以一个常量的值,然后再把结果赋给变量

%=

取模等于

先对变量进行模运算,然后把结果赋给变量

例:计算两个数的最大公约数Greatest Common Divisor

#!/bin/bash
#采用辗转相除法,求两个数的最大公约数
ARGS=2
E_BADARGS=65
if [ $# -ne "$ARGS" ]
then
  echo "Usage: `basename $0` first-number second-number"
  exit $E_BADARGS
fi
gcd ()
{
 dividend=$1
 divisor=$2
 remainder=1
 until [ "$remainder" -eq 0 ]
 do
  let "remainder = $dividend % $divisor"
  dividend=$divisor
  divisor=$remainder
 done
}
gcd $1 $2

echo ; echo "($1,$2)=$dividend";echo
exit 0

[root@server1 ~]# ./ji.sh 22 12

(22,12)=2

#!/bin/bash
#算术操作符的练习,用十种不同的方法
n=0; echo -n "$n"
#1:let
let "n = $n+1" # let "n = n+1" 也可以
echo -n "$n"
#2:变量扩展
: $(( n = $n +1  ))    #注意首行的冒号
echo -n "$n"
#3:双圆括号,赋值操作
(( n = n+1 )) # 与方法2不同的
echo -n "$n"
#4:变量重新赋值
n=$(($n+1))
echo -n "$n"
#5;与2类似
: $[n = $n + 1]  #注意首行的冒号
echo -n "$n"
#6:与4类似
n=$[$n +1]
echo -n "$n"
#7:let自加
let "n++" # let "++n" 也可以
echo -n "$n"
#8:整数扩展 自加
((n++)) # ((++n)) 也可以
echo -n "$n"
#9:变量扩展 自加
: $((n++)) #$((++n)) 也可以
echo -n "$n"
#10:与9类似
: $[n++]  #$[++n] 也可以
echo -n "$n"
echo 
exit 0

 

浮点数:bash默认处理不了

[root@server1 ~]# let "a = 1.1 + 2.2" ;echo $a

-bash: let: a = 1.1 + 2.2: 语法错误: 无效的算术运算符 (错误符号是 ".1 + 2.2")

28

[root@server1 ~]# echo "a = 1.1 + 2.2" | bc

3.3

3.位操作符  Bitwise Operators

<<

左一位(每次左移但相对于乘以2)

<<=

左移-赋值

>>

右移-赋值(每次右移都将除以2)

>>=

右移-赋值(与<<=正好相反)

&

按位与

&=

按位与-赋值

|

按位或

| =

按位或-赋值

~

按位反

按位非

^

按位异或XOR

^=

按位异或-赋值

4.逻辑操作符  Logical (Boolean) Operators

4.1 ! 非

 if [ ! -f $FILENAME ] ; then

 …

4.2 && 于

 4.2.1 if [ $condition1 ] && [ $confition2 ]

 4.2.2 if [ [ $condition1  &&  $confition2 ] ]

4.3 | | 或

4.3.1 if [ $condition1 ] || [ $confition2 ]

4.3.2 if [ [ $condition1  ||  $confition2 ] ]

5.杂项操作符  Miscellaneous Operators

5.1 , 逗号操作符可以连接两个或多个算术运算

5.2所有的操作都会被运行,但是只会返回最后操作的结果

#!/bin/bash
let "t1 = ((5+3,7-1,15-4))"
echo "t1 = $t1"
let "t2 = ((a=9,15/3))"
echo "t2=$t2 a=$a"

 

 5.3常用于for循环中

#/bin/bash
#使用类似c语言的“逗号操作符”,来同时增加两个变量的值
for (( a=1, b=1; a <= LIMIT ; a++, b++)) #用逗号同时进行两条操作
do
 echo -n "$a-$b"
done

二、操作优先级  Operator Precedence

基本原则

如果优先级相同那么从左到右

先乘除后加减

例:操作符优先级

a. “看山发“ :先看轮廓,后看细节

1.while [ -n “$remaining” -a “$retry” -gt 0 ] ; do

2. if [ -f /etc/sysconfig/i180 -a -z “${NOLOVALE:-} : ] : then

b.最佳策略:增加一些方括号,方便阅读

1. if [ “$v1” -gt “$v2” -o “$v1” -lt “$v2” -a -e “$filename” ]

2.if [[ “$v1” -gt “$v2” ]] || [[ “$v1” -lt “$v2” ]] && [[ -e “$filename” ]

三、数字常量 Numerical Constants

 3.1 默认情况下,数字是10进制数

 let "dec = 32"

3.2 8进制:以0开头

 let “oct = 032”

3.3 16进制:以0x开头

 let “hex = 0x32”

3.4其他进制:BASE:NUMBER

 let “bin = 2#111100111001101” 

 let “bin = 32#77”  

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]中提到了在Linux系统中保存永久环境变量的方法。对于root用户,可以在/etc/profile文件中添加变量,并执行source /etc/profile命令使其生效。对于普通用户,可以在用户目录下的.bash_profile或者.bashrc文件中增加变量,并执行source .bash_profile命令使其生效。此外,还可以直接运行export命令定义短暂的环境变量,该变量只在当前的shell或其子shell下有效,shell关闭后变量失效。常量可以使用readonly或declare -r命令声明为只读常量,只能声明不能修改或删除。退出当前进程时,只读环境变量也会消失。可以使用declare -r或readonly -p命令查看只读变量的值。 引用\[2\]中提到了一些常用的shell命令和操作符。例如,grep -q命令可以用于不显示执行结果,-q选项表示不显示执行的结果。短与&&和短或||操作符可以用于根据前一个命令的执行结果来决定是否执行后一个命令。异或操作可以用于交换两个变量的值。比较操作可以使用字符串比较和数字比较,字符串比较使用\[ str = str \]的形式,数字比较使用\[ num1 -eq num2 \]的形式。 引用\[3\]中提到了变量在shell脚本中的传递问题。当一个变量在脚本中创建时,它不会自动传递给后续创建的shell进程。但是可以使用export命令将变量的值传递给后续的shell脚本。当一个shell脚本调用并执行时,它不会自动获得调用者定义的变量的访问权限,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后续脚本。 根据以上引用内容,SHELL_EXPORT_CMD_EX可能是一个用于导出环境变量的命令或脚本。 #### 引用[.reference_title] - *1* *2* [shell_环境变量_常量_位置变量_运算(3)](https://blog.csdn.net/qq_39457834/article/details/105040541)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [export命令_Linux export 命令用法详解:设置或显示系统环境变量](https://blog.csdn.net/weixin_34332352/article/details/116802607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值