03 基本数据类型与值操作

基本数据类型与值操作

一 数据类型介绍

什么是数据?为何要有多种类型的数据?

数据即变量的值,变量是用来反映状态以及状态变化的,针对不同类型的状态就应该用不同类型的数据去标识。

shell是一门解释型、弱类型、动态语言

  1. 编译型 or 解释型
  1. 强类型 or 弱类型
    强类型语言: 数据类型不可以被忽略的语言
    弱类型语言:数据类型可以被忽略的语言
  1. 动态型 or 静态型
    动态语言 :运行时才进行数据类型检查
    静态语言:需要事先给变量进行数据类型定义

二 基本数据类型

数字

# int整形
定义: age=10
用于标识:年龄、等级、身份证号、个数等
# float浮点型
定义: salary=3.1
用于标识:工资、身高、体重等

字符串

定义: msg='shell'" "】弱引用,引号的特殊字符有意义  【' '】强引用,引号内所有特殊字符都取消意义
echo "${msg} is good" --> shell is good
echo '${msg} is good' --> ${msg} is good	

数组

  1. 什么是数组: 一系列元素的集合,一个数组内可以存放多个元素
  2. 为何要用数组:用数组将多个元素汇总到一起,避免单独定义的麻烦
  3. 普通数组:只能使用整数作为数组索引
  4. 关联数组:可以使用字符串作为数组索引,需要使用declare-A声明
=================声明普通数组=================
# 方式一:array=(元素1 元素2 元素3)
array=(egon 18 male)
# 方式二:array=([key1]=value1 [key2]=value2 [key3]=value3)
array=([0]=111 [1]="two" [2]=333)
# 方式三:依次赋值
array[0]=111
array[1]=222
array[2]="third"
# 方式四:利用执行命令的结果设置数组元素:array=($(命令))  或者  array=(`命令`)
array=(`ls /test`)
declare -a | grep array
# ps:查看声明过的数组
declare -a
=================访问普通数组=================
ip_array=(1.1.1.1 2.2.2.2 3.3.3.3)
# 正向索引
echo ${ip_array[0]} --> 1.1.1.1
# 负向索引
echo ${ip_array[-1]} --> 3.3.3.3
=================声明关联数组=================
declare -A info
info["name"]="egon"
info["age"]=18
info["gender"]="male"
declare -A |grep info --> declare -A info='([gender]="male" [name]="egon" [age]="18" )'
echo ${info[*]} --> male egon 18
echo ${info["name"]} --> egon
=================访问关联数组=================
info=([0]="egon" ["age"]=18 ["gender"]="male")
echo ${info[0]} --> egon
echo ${info["age"]} --> 18

三 变量值操作

3.1 获取变量值的长度

msg='hello world!'
echo ${#msg} 
echo $msg | wc -L
echo $msg | awk '{print length}'
expr length "$msg"

3.2 切片

${paramter:offset:length}
msg="abcdef"
echo ${msg:3} --> def #从3号索引开始,一直到最后
echo ${msg:3:2} --> de #从3号索引开始,往后数2个字符
echo ${msg::3} --> abc #从0开始,往后数3个字符

3.3 截断

url="www.sina.com.cn"
# =================》一、砍掉左边的字符《=================
# 1.1 简单使用 
echo ${url#www.} --> sina.com.cn
# 1.2 结合*=》非贪婪,默认情况下*是非贪婪,尽可能地少“吃”字符
echo ${url#*w} --> ww.sina.com.cn
# 1.3 结合*=》贪婪,尽可能地多“吃”字符
echo ${url##*w} --> .sina.com.cn
# =================》二、砍掉右边的字符《=================
# 1.1 简单使用
echo ${url%.cn} --> www.sina.com
# 1.2 结合*=》非贪婪
echo ${url%.*} --> www.sina.com
# 1.3 结合*=》贪婪
echo ${url%%.*} --> www
# =================》三、应用示例《=================
echo $HOSTNAME
echo ${HOSTNAME%.*}
echo ${HOSTNAME%%.*}

3.4 内容的替换

url="www.sina.com.cn"
echo ${url/sina/baidu} --> www.baidu.com.cn
echo ${url/n/N} --> www.siNa.com.cn
echo ${url//n/N} --> www.siNa.com.cN (贪婪)

3.5 变量的替代

${x:-临时变量信息}
${x:=新的变量信息}
${x:?没有设置变量提示信息}   
${x:+有设置变量提示信息} 

#1、${parameter-word}: 当调取变量没有定义过, 就返回word字符串信息
unset name 
echo ${name} -->
echo ${name-"egon"} --> egon
gender=
echo ${gender-"male"} --> 
age=18  
echo ${age-19} --> 18

#2、${parameter:-word}: 当调取变量信息值为空时或未定义变量, 就返回word字符串信息
echo ${x:-aaa} --> aaa  # 没有定义过变量x,则使用-后的值
y=
echo ${y:-aaa} --> aaa  # 定义过变量y,但变量y的值为空值,则使用-后的值
z=333
echo ${z:-aaa} --> 333 #定义过变量了,并且变量有一个非空的原值,则使用变量的原值

#3、{parameter:=word}:当调取变量信息值为空时或未定义,则设置指定字符串为新的变量值
echo ${x:=123} --> 123
echo $x --> 123

#4、${parameter:?word}:当调取变量信息值为空时或未定义,指定为赋值的错误提示信息
echo ${x:?该变量没有定义过} --> -bash: x: 该变量没有定义过

#5、${parameter:+word}:当调取变量信息值为空时或未定义,不做任何处理,否则word字符串将替代变量值
unset x
echo ${x:+哈哈哈} --> 
x=123
echo ${x:+哈哈哈} --> 哈哈哈

3.6 let

# (1) 变量的值
j=1
let ++j
echo $j --> 2

# (2) 表达式的值
unset i
unset j
i=1
j=1
let x=i++  # 先把i赋值给x,然后再++
let y=++j  # 先++j,然后再把j的结果赋值给y
echo $i
echo $j
echo $x
echo $y

3.7 取命令的结果赋值给变量

# ``与$(),` `命令替换,等价于$(),反引号中的shell命令会被先执行
touch `date +%F`_file1.txt  
touch $(date +%F)_file2.txt 
disk_free3="df -Ph |grep '/$' | awk '{print $4}'"  # 错误
disk_free4=$(df -Ph |grep '/$' | awk '{print $4}') # 正确
disk_free5=`df -Ph |grep '/$' | awk '{print $4}'`  # 正确
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值