全世界做会展介绍的网站排名,云谷系统网站开发,佛山微网站价格,外国人在中国做美食视频网站一#xff1a;变量概述
1.什么是变量
变量来源于数学#xff0c;是计算机语言中能储存计算结果或能表示值的抽象概念
变量可以通过变量名访问#xff0c;在指令式语言中#xff0c;变量通常是可变的#xff1b;在某些条件下也是不可变的
2.变量的规则
命名只…一变量概述
1.什么是变量
变量来源于数学是计算机语言中能储存计算结果或能表示值的抽象概念
变量可以通过变量名访问在指令式语言中变量通常是可变的在某些条件下也是不可变的
2.变量的规则
命名只能使用英文字母数字和下划线首个字符不能以数字开头
中间不能有空格可以使用下划线
不能使用标点符号
不能使用bash里的关键字
二变量分类
1.自定义变量
定义变量变量名变量值 例如xingdian123
引用变量$变量名 或 ${变量名}
查看变量echo $变量名
取消变量unset 变量名
作用范围仅在当前shell中有效所以切换另一个终端会导致变量失效
2.环境变量
定义环境变量
方法一 export back_dir2/home/backup
方法二 先给自定义变量back_dir1赋值然后export back_dir1 将自定义变量转换成环境变量
引用环境变量$变量名 或 ${变量名}
查看环境变量echo $变量名
取消环境变量unset 变量名
变量作用范围在当前shell和子shell有效
注意
环境变量拥有可继承性export之后就拥有继承性
永久生效写到环境变量脚本/etc/profile ~/.baserc ~/.bash_profile /etc/bashrc
案例
[rootxingdiancloud ~]# vim /etc/profile
JAVA_HOME/usr/local/java
PATH$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH[rootxingdiancloud ~]# vim ~/.bash_profile (只显示部分)
PATH$PATH:$HOME/bin:/usr/local/mycat/bin/etc/profile针对于系统的环境变量对所有用户生效
这是系统最主要的shell设置文件也是用户登陆时系统最先检查的文件有关重要的环境变量都定义在此其中包括PATH,USER,LOGNAME,MAIL,HOSTNAME,HISTSIZE,INPUTRC等。而在文件的最后它会检查并执行/etc/profile.d/*.sh的脚本
~/.bash_profile针对于用户的环境变量只对当前登录用户生效
这个文件是每位用户的bash环境设置文件它存在与于用户的主目录中当系统执行/etc/profile 后就会接着读取此文件内的设置值。在此文件中会定义USERNAME,BASH_ENV和PATH等环境变量但是此处PATH除了包含系统的$PATH变量外加入用户的“bin”目录路径
~/.bashrc
接下来系统会检查~.bashrc文件这个文件和前两个文件/etc/profile 和.bash_profile最大的不同是每次执行bash时.bashrc都会被再次读取也就是变量会再次地设置而/etc/profile,./bash_profile只有在登陆时才读取。就是因为要经常的读取所以**/.bashrc文件只定义一些终端机设置以及shell提示符号等功能**而不是定义环境变量
~/.bash_login
.bash_login默认不存在**但如果/.bash_profile文件不存在则系统会转而读取/.bash_login这个文件内容。**这是用户的登陆文件在每次用户登陆系统时bash都会读此内容所以通常都会将登陆后必须执行的命令放在这个文件中
.profile
如果~./bash_profile ./bash_login两个文件都不存在则会使用这个文件的设置内容其实它的功能与/.bash_profile相同
.bash_logout
如果想在注销shell前执行一些工作都可以在此文件中设置
[rootxingdiancloud ~]# vi ~.bash_logout
clear
仅执行一个clear命令在你注销的时候~/.bash_history
这个文件会记录用户先前使用的历史命令
注意
在/etc/profile.d建立独立的环境变量配置文件
常用环境变量USER UID HOME HOSTNAME PWD PATH
PATH这个变量存放的是所有命令所在的路径 修改PATH$PATH:目录
3.位置变量
$1 $2 $3 $4 $5 $6 $7 $8 $9 $10
位置变量并不会在脚本中进行赋值而是在执行脚本时对其进行赋值
格式
bash 含有位置变量的脚本文件 $1的赋值 $2的赋值 $3的赋值 …
案例
[rootxingdiancloud sh]# cat xingdian.sh
#!/bin/bash
echo hello $1
[rootxingdiancloud sh]# bash xingdian.sh xingdian
hello xingdian4.预定义变量
$0 脚本名
$* 所有的参数
$ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值0表示成功1表示失败
$USER 当前登录用户的用户名
$HOME 当前用户的家目录
$PATH 命令搜索路径由冒号分割的目录列表组成
$UID 当前用户的UID
$HOSTNAME 当前主机名案例
[rootxingdiancloud sh]# cat test.sh
#!/bin/bash
echo 第2个位置参数是$2
echo 第1个位置参数是$1
echo 第4个位置参数是$4echo 所有参数是: $*
echo 所有参数是: $
echo 参数的个数是: $#
echo 当前进程的PID是: $$echo $1$1
echo $2$2
echo $3$3
echo $*$*
echo $$
echo $#$#
echo $$$$三变量赋值
1.显示赋值
变量名变量值
示例
[rootxingdiancloud ~]# ip1192.168.1.251
[rootxingdiancloud ~]# schoolBeiJing 1000phone
[rootxingdiancloud ~]# today1date %F
[rootxingdiancloud ~]# today2$(date %F)
变量中引用涉及到命令时使用两个反引号或者$(),两者等价2.键盘读入
read 变量名
read -p 提示信息: 变量名
read -t 5 -p 提示信息: 变量名 -t 后面跟秒数定义输入字符的等待时间
read -n 2 变量名 -n 后跟一个数字定义输入文本的长度很实用。案例1
[rootxingdiancloud ~]# vim first.sh
back_dir1/var/backup
read -p 请输入你的备份目录: back_dir2
echo $back_dir1
echo $back_dir2
[rootxingdiancloud ~]# sh first.sh案例2
[rootxingdiancloud ~]# vim ping2.sh
#!/bin/bash
read -p Input IP: ip
ping -c2 $ip /dev/null
if [ $? 0 ];then echo host $ip is ok
else echo host $ip is fail
fi
[rootxingdiancloud ~]# chmod ax ping2.sh
[rootxingdiancloud ~]# ./ping.sh注意定义或引用变量时注意事项
弱引用 可以实现变量和命令的替换
’ ’ 强引用 不完成变量替换
反引命令替换 等价于 $() 反引号中的shell命令会被先执行
[rootxingdiancloud ~]# school1000phone
[rootxingdiancloud ~]# echo ${school} is good
1000phone is good
[rootxingdiancloud ~]# echo ${school} is good
${school} is good
[rootxingdiancloud ~]# touch date %F_file1.txt
[rootxingdiancloud ~]# touch $(date %F)_file2.txt
[rootxingdiancloud ~]# disk_free3df -Ph |grep /$ |awk {print $4} 错误
[rootxingdiancloud ~]# disk_free4$(df -Ph |grep /$ |awk {print $4})
[rootxingdiancloud ~]# disk_free5df -Ph |grep /$ |awk {print $4}四变量运算
1.整数运算
方法一expr
运算符和变量之间有空格
[rootxingdiancloud ~]# expr 1 2
[rootxingdiancloud ~]# expr $num1 $num2 - \* / %方法二$(())
[rootxingdiancloud ~]# echo $(($num1$num2)) - * / %
[rootxingdiancloud ~]# echo $((num1num2))
[rootxingdiancloud ~]# echo $((5-3*2))
[rootxingdiancloud ~]# echo $(((5-3)*2))
[rootxingdiancloud ~]# echo $((2**3))
[rootxingdiancloud ~]# sum$((12)); echo $sum方法三$[]
[rootxingdiancloud ~]# echo $[52] - * / %
[rootxingdiancloud ~]# echo $[5**2]方法四let
[rootxingdiancloud ~]# let sum23; echo $sum
[rootxingdiancloud ~]# let i; echo $i2.小数运算
通过echo将值传给bc使用bc做小数运算scale指定小数点位数
加法运算(scale参数无效)
[rootxingdiancloud ~]# echo 5.999 5.001|bc
6.000
[rootxingdiancloud ~]# echo 5.111 5.1114|bc
10.2224减法运算(scale参数无效)
[rootxingdiancloud ~]# echo 2.22 - 1.11|bc
1.11乘法运算
[rootxingdiancloud ~]# echo 5.12 * 5.6000|bc
28.6720注意乘积小数点位数默认以乘数中小数点位数最多的为准不指定scale参数
除法运算
[rootxingdiancloud ~]# echo scale2;9.898 / 1.11|bc
8.91
[rootxingdiancloud ~]# echo 9.898 / 1.11|bc
8五扩展
1.内容的删除
统计变量长度${#变量名}
标准查看${变量名}
从前往后进行最短匹配并删除匹配内容${变量名#*匹配字符}
从前往后进行最长匹配并删除匹配内容${变量名##*匹配字符}
从后往前进行最短匹配并删除匹配内容${变量名%匹配字符*}
从后往前进行最长匹配并删除匹配内容${变量名%%匹配字符*}
案例一
[rootxingdian ~]# urlwww.sina.com.cn
[rootxingdian ~]# echo ${#url} 统计变量值的长度15
[rootxingdian ~]# echo ${url} 标准查看
www.sina.com.cn
[rootxingdian ~]# echo ${url#*.} 从前往后最短匹配
sina.com.cn
[rootxingdian ~]# echo ${url##*.} 从前往后最长匹配 贪婪匹配
cn
[rootxingdian ~]# urlwww.sina.com.cn
[rootxingdian ~]# echo ${url#a.}
www.sina.com.cn
[rootxingdian ~]# echo ${url#*sina.}
com.cn案例二
[rootxingdian ~]# urlwww.sina.com.cn
[rootxingdian ~]# echo ${url}
www.sina.com.cn
[rootxingdian ~]# echo ${url%.*} 从后往前最短匹配
www.sina.com
[rootxingdian ~]# echo ${url%%.*} 从后往前最长匹配 贪婪匹配
www
[rootxingdian ~]# echo $HOSTNAME
xingdian.1000phone.com
[rootxingdian ~]# echo ${HOSTNAME%%.*}
xingdian2.索引及切片
[rootxingdian ~]# echo ${url:0:5} //从头开始,向后5个结束
[rootxingdian ~]# echo ${url:5:3} //从第6个开始向后3个结束
[rootxingdian ~]# echo ${url:5} //从第6个开始直到结尾3.变量内容替换
[rootxingdian ~]# urlwww.sina.com.cn
[rootxingdian ~]# echo ${url/sina/baidu}
www.baidu.com.cn
[rootxingdian ~]# urlwww.sina.com.cn
[rootxingdian ~]# echo ${url/n/N} //只替换匹配到的第一个
www.siNa.com.cn
[rootxingdian ~]# echo ${url//n/N} //替换匹配到的所有贪婪匹配
www.siNa.com.cN4.自增运算
对变量的值的影响
[rootxingdian ~]# i1
[rootxingdian ~]# let i
[rootxingdian ~]# echo $i
2
[rootxingdian ~]# j1
[rootxingdian ~]# let j
[rootxingdian ~]# echo $j
2对表达式的值的影响
[rootxingdian ~]# unset i
[rootxingdian ~]# unset j
[rootxingdian ~]#
[rootxingdian ~]# i1
[rootxingdian ~]# j1
[rootxingdian ~]#
[rootxingdian ~]# let xi 先赋值再运算
[rootxingdian ~]# let yj 先运算再赋值
[rootxingdian ~]#
[rootxingdian ~]# echo $i
2
[rootxingdian ~]# echo $j
2
[rootxingdian ~]#
[rootxingdian ~]# echo $x
1
[rootxingdian ~]# echo $y
2