码迷,mamicode.com
首页 > 系统相关 > 详细

shell 赋值 运算

时间:2020-04-18 15:48:20      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:提示   expr   声明变量   参数   推荐   整型   style   变化   idt   

一、read 接收键盘输入

read [选项] [变量名]

选项:

-p 提示信息

-t 秒数

-n 字符数

-s隐藏输入的数据

例子:使用read 提示输入参数值

技术图片

 

结果:

技术图片

 

 

 

 与位置参数变化相比,更友好

二、declare 声明变量类型

+   取消变量的类型属性

- 给变量设置类型属性

-a 设置变量类型为数组

-i  将变量类型声明为整数型

-x 将变量声明为环境变量

-p 显示变量的被声明类型

例如1:a 没有定义类型,默认为字符串,当定义a为整型(-i),在将字符串赋值给a时,此时当然会失败,输出为0.查看a的属性(-p),为整形


gjl@gjl-virtual-machine:~/shellTest$ declare -p a declare -- a="1" gjl@gjl-virtual-machine:~/shellTest$ declare -i a gjl@gjl-virtual-machine:~/shellTest$ a=we gjl@gjl-virtual-machine:~/shellTest$ echo $a 0 gjl@gjl-virtual-machine:~/shellTest$ a=12 gjl@gjl-virtual-machine:~/shellTest$ echo $a 12 gjl@gjl-virtual-machine:~/shellTest$ declare -p a declare -i a="12"

例如2:声明b为数组,并显示数组

gjl@gjl-virtual-machine:~/shellTest$ declare -a c=([0]=1 [2]=11 [3]=aa)
gjl@gjl-virtual-machine:~/shellTest$ echo ${c[2]}
11

数组赋值

1、按需添加

gjl@gjl-virtual-machine:~/shellTest$ b[0]=1
gjl@gjl-virtual-machine:~/shellTest$ b[1]=2
gjl@gjl-virtual-machine:~/shellTest$ echo ${b[*]}
1 2
gjl@gjl-virtual-machine:~/shellTest$ echo ${b[@]}
1 2

2、一次性添加多个元素 

gjl@gjl-virtual-machine:~/shellTest$ declare -a c
gjl@gjl-virtual-machine:~/shellTest$ c=(1 2 3)
gjl@gjl-virtual-machine:~/shellTest$ echo ${c[*]}
1 2 3

3、按稀疏格式添加

gjl@gjl-virtual-machine:~/shellTest$ declare -a c=([0]=1 [2]=11 [3]=aa)
gjl@gjl-virtual-machine:~/shellTest$ echo ${c[2]}
11

数组不是按照0123这样的顺序来的  

4、通过read -a 方式添加

#!/bin/bash
read  -p "please input shuzu:" -a   e
echo ${e[*]}
echo ${e[2]}



gjl@gjl-virtual-machine:~/shellTest$ test07.sh
please input shuzu:3 4 34
3 4 34
34

注意事项:引用变量的时候,花括号不能少,用括号来表示数组,数组元素用"空格"符号分割开

技术图片

 

 

 

删除数组中的某个值/删除数组

gjl@gjl-virtual-machine:~/shellTest$ echo ${c[*]}
1 2 3
gjl@gjl-virtual-machine:~/shellTest$ unset c[2]
gjl@gjl-virtual-machine:~/shellTest$ echo ${c[*]}
1 2
gjl@gjl-virtual-machine:~/shellTest$ unset c
gjl@gjl-virtual-machine:~/shellTest$ echo ${c[*]}

gjl@gjl-virtual-machine:~/shellTest$ 

取消变量的类型

例如:a为整型,使用+ 删除a的整型属性

gjl@gjl-virtual-machine:~/shellTest$ declare -p a
declare -i a="12"
gjl@gjl-virtual-machine:~/shellTest$ declare +i a
gjl@gjl-virtual-machine:~/shellTest$ declare -p a
declare -- a="12"
gjl@gjl-virtual-machine:~/shellTest$

 

三、运算

 数值运算的三种方法

①declare(不推荐)

②使用expr或let 运算工具(不推荐)

gjl@gjl-virtual-machine:~$ a=12
gjl@gjl-virtual-machine:~$ b=23
gjl@gjl-virtual-machine:~$ c=$(expr $a + $b)
gjl@gjl-virtual-machine:~$ echo $c
35
gjl@gjl-virtual-machine:~$ let e=$a+$b
gjl@gjl-virtual-machine:~$ echo $e
35
gjl@gjl-virtual-machine:~$ 
 


注意事项:1、+两边需要空格
        2、$() 是指调用系统命令

 

③使用$(()) 或$[] 进行数值运算

gjl@gjl-virtual-machine:~$ a=11 ; b=33
gjl@gjl-virtual-machine:~$ echo c=$(($a+$b))
c=44
gjl@gjl-virtual-machine:~$ echo d=$[$a+$b]
d=44
gjl@gjl-virtual-machine:~$ 

例子:四则运算计算器(第一版)

#!/bin/bash
read -t 30 -p "please input num1:" num1
read -t 30 -p "please input num2:" num2
read -t 30 -p "please input operato:[+-*/]:" oper
[ "$oper" == "+" ] && echo "$(($num1+$num2))" && exit
[ "$oper" == "-" ] && echo "$(($num1-$num2))" && exit
[ "$oper" == "*" ] && echo "$(($num1*$num2))" && exit
[ "$oper" == "/" ] && echo "$(($num1/$num2))" && exit
echo "please input a varible operato"

缺点及注意点:此例中num1、num2未作判断。且[] 两边需要空格,否则会报错

 

四、变量的测试与内容置换

技术图片

 

例如1:如果没有设置变量a,则x值为新值。如果a设置为空,则x值为空值。如果设置为123,则x的值为123.

可以用来测试变量是否存在或者有值

技术图片

 

shell 赋值 运算

标签:提示   expr   声明变量   参数   推荐   整型   style   变化   idt   

原文地址:https://www.cnblogs.com/recommencer/p/12719230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!