文章目录
变量:可以变化的量是可以命名的内存空间
#通用
1:unset 变量名(取消变量)
-v取消变量
-f取消函数 默认为先判断是否为变量(先取消) 在判断是否为函数(后取消)
2:declare (指定变量类型)
-i 为整型 (shell默认为char 此项可用来运算)
-r 为只读变量 不加变量名和值也可以变成查看只读变量
+ 为取消变量属性
-x 为环境变量
shift 剔除已经取到的值 (剩下的位置变量依次上推来读取)
set 查看所有变量
1.命名:
变量名=123 变量名与值之间不能有空格 只能以下划线和字母开头命名
2.分类:
1.自定义变量 :
当前终端生效
2.环境变量:
所有的子shell生效
使用 export 和 declare -x 定义环境变量
使用env 和 export -p 查看环境变量
3.位置变量 :
位置1就是$1
位置2就是$2 ( 依次类推超过2位数需要加{} )
4.预定义变量:
$0 查看当前脚本名
$* 空格不分开一个参数显示所有的参数
$@ 按照空格分开显示所有参数
$$ 当前进程ID
$# 所有参数
$? 判断返回命令成功结果 (一般 1为不成功 0为成功)
$! 上一个后台的进程 (sleep 400 & 后台沉睡400 )
5.只读变量
readonly a=123 (以readonly 命名) 只能读 不能改和取消
declare -r a=123
6.永久变量的文件地址 以及 读取顺序 ( 6.1>6.2>6.3)
6.1 3个文件所有用户都可以获取到变量
/etc/profile.d/*.sh
/etc/bashrc
/etc/profile #切换用户加 - 以登陆式切换用户不会加载
6.2 root用户匹配到变量
/root/.bashrc
6.3 只有当前用户可以匹配到变量
~/.bash_profile
3.变量运算
1单双引号在shell的区别
单引号:保持字面意思
双引号:引用其含义
反引号:解释为执行shell命令
2.变量域
local a=100 #以local定义的变量为局部变量
3.算数运算
# c=1 k=2
1. (()) #引用变量可以在(())前加 $
2. let #用于整数运算 引用变量加 $
# let sum= c + c+ c+k 和 sum=$((c+k)) 一样
3. [] s3=$[c*w] #用于整数运算 , 主为变量运算 需要变量名接*
4. declare -i s4= c ∗ c* c∗w #需要变量名接
5. expr $c \* $k #整数运算 直接输出值 运算符前后需要空格 字符需要反斜杠转义
6. echo c ∗ c* c∗k |bc #相当于计算器 可以运算小数 但是算出结果若有小数则直接舍去小数 进入后直接计算
4.变量字符的的操作
1.字符串操作
name=zhangsan
echo ${#name} #字符的长度
echo ${name:1} #以第一个字符开始截取
echo ${name:1:3} #从第一个字符开始截取的长度
2.字符串/#%的作用
url=http://www.baidu.com/index.html
echo ${curl#*/} #从左向右切除最 短 的字符 以所有字符到 / 停止
echo ${curl##*/} #从左向右切除最 长 的字符 以所有字符到 / 停止
echo ${curl%/*} #从右向左切除最 短 的字符 以所有字符到 / 停止
echo ${curl%%/*} #从右向左切除最 长 的字符 以所有字符到 / 停止
echo ${curl/http/https} #将HTTP 协议换成 https 默认是第一次匹配到的
3.expr
expr index dafaf d #将dafaf第一次出现d标记 显示为1
expr substr helloword 1 3 #将 hel 截取出来 截取[1,3]
expr length hhh #长度 为3
expr index +index i #+号为取消其属性
expr 1 = 2 # 返回0则为假 1则为真
4.变量空值判断
echo ${a-123} #若没有变量则临时赋值 123
echo ${a=123} #若没有变量则永久赋值123
echo ${a:+123} #若有变量c则临时赋值123
echo ${a:? this is null} #若为空则报错 自己的语句
5.read 脚本交互
read 以换行符作为参数的分离
read 可以赋值多个值 第一个值赋给第个变量 第二个值赋给第二个变量 不需要在变量名加2 $
read -p “这里可以打印提示信息” a #a为变量名
read -n 4 a #当输入字符超过4个字符则自动退出交互模式
read -t 5 a #等待时间 当超过5秒自动退出交互模式 但是输出的变量就会为空
read -s a #关闭回显 输入的不显示 就像输入密码不显示密码
作业
1.总结变量的类型及含义?
2.实现课堂案例计算长方形面积?(6种方式)
3.定义变量url=https://blog.csdn.net/weixin_45029822/article/details/103568815(通过多种方法实现) 1)截取网站访问的协议 2)截取网站访问账号信息
#问题2
[root@B six]# vim s.sh
#!/bin/bash
c=3
k=2
s1=$((c*k))
echo s1=$s1
s2=$[c*k]
echo s2=$s2
declare -i s3=$c*$k
echo s3=$s3
s4=`expr $c \* $k`
echo s4=$s4
s5=`echo $c*$k | bc`
echo s5=$s5
awk 'BEGIN{ c=3;k=2;print"s6=",c*k }'
let s7=$c*$k
echo s7=$s7
[root@B six]# bash s.sh
s1=6
s2=6
s3=6
s4=6
s5=6
s6=6
s7=6
#问题2
[root@B six]# vim url.sh
#!/bin/bash
#截取网站协议 截取网站访问账号信息
url=https://blog.csdn.net/weixin_45029822/article/details/103568815
echo ${url##*/}
echo ${url%%:*}
echo ${url:0:5}
[root@B six]# bash url.sh
103568815
https
https