镜像下载、域名解析、时间同步请点击 阿里云开源镜像站
变量即变化的量,核心是”变“与”量“二字,变即变化,量即衡量状态。
量:是记录现实世界当中的某种状态<br>变:指的是记录的状态是可以发送变化的
name=wshage=22
变量名 赋值符号 变量值name=wsh //shell中定义变量name:wsh //yaml中定义的变量
相当于一个门牌号,便于取出变量值,是访问到值的唯一方式
将值的内存地址,绑定给变量名
用来表示状态
变量的使用规则:先定义,再通过变量名去引用
变量名的命名规则
1.大前提:变量名的命名应该能够反映出值记录的状态<br>2.变量是用来访问变量值的,所以变量名应该遵循一定规范,来方便我们标识存到内存中值的功能
1.变量名只能是字母、字母、数字或下划线的任意组合(区分大小写)2.变量名不可以使用中文3.变量名不可以使用命令来命名4.不要用拼音5.变量名不能以数字开头
变量名定义的方式
1.下划线+纯小写name_of_wsh='wushihang'name_of_oldboy='laonanhai'2.驼峰体nameOfWsh='wushihang'nameOfOldboy='laonanhai'ageOfOldboy=883.下划线+纯大写NAME_OF_OLDBOY='laonanhai'不好的方式:1.变量名为中文、拼音2.变量名过长3.变量名词不达意
## 查看系统环境变量envdeclareexport## 环境变量LANG ## 字符集语言PATH ## 该变量中路径里的所有可执行文件,都可以直接执行,不需要加路径PS1 ## 命令提示符UID ## 当前登录用户的uidHOSTNAME ## 当前主机PWD ## 当前工作路径USER ## 当前登录的用户名## 历史记录相关HISTSIZEHISTFILESIZEHISTFILETMOUTHISTCONTROL: export HISTCONTROL=ignorespace # 离职专用变量(强制历史记录不记住该命令)PROMPT_COMMAND
DATE=$(date +%F-%T)IP=$(ifconfig eth0|awk 'NR==2{print $2}')mkdir $DATE_$IP_$HOSTNAME ## 基本凉了### 注意使用大括号分隔变量mkdir ${DATE}_${IP}_${HOSTNAME}
$n: N正整数,$1 $2 $3....$n 两位数要使用{}, ${10} ${11}$0: 执行脚本的路径和名字$#: 传递参数的个数$*: 1.不适合数组使用 2.调用时加双引号 ## 接收脚本后面所有的参数$@: 1.适合后面数组数据类型使用 2.调用时加双引号 ## 接收脚本后面所有的参数
$?:表示上一个命令执行的状态(上一条命令的返回值) 0,成功执行 非0,失败特殊命令:- false- diff$$:表示当前脚本执行的pid$!:上一个脚本或程序运行的pid$_:获取上一条命令的最后一个参数(以空格为分隔符) ## 相当于 Esc + .
${#变量名}:获取该变量的长度[root@web01 ~]# vim a.sh#!bin/bashname=wshecho ${#name}[root@web01 ~]# . a.sh3[root@web01 ~]# vim a.sh#!bin/bashname=$1echo ${#name}[root@web01 ~]# . a.sh 1234566[root@web01 ~]# vim a.sh#!bin/bashread -p '请输入用户名:' nameread -p '请输入密码:' pasif [ ${#pas} -lt 8 ];thenecho '密码必须大于等于八位'elseecho '密码符合要求'fi[root@web01 ~]# . a.sh请输入用户名:www请输入密码:111密码必须大于等于八位[root@web01 ~]# . a.sh请输入用户名:www请输入密码:12345678密码符合要求${变量名}:调用变量${变量名:偏移量}:字符串的截取[root@web01 ~]# vim a.sh#!bin/bashname=wshecho ${name:1}[root@web01 ~]# . a.shsh${变量名:偏移量:步长}:字符串的截取[root@web01 ~]# vim a.sh#!bin/bashname=wsh_blog51CTOecho ${name:3:5}[root@web01 ~]# . a.sh_blog${变量名#字符串}:从变量开头,删除最短匹配word的子串${变量名##字符串}:从变量开头,删除最长匹配word的子串[root@web01 ~]# vim a.sh#!bin/bashname=/tmp/abc/1.txtecho ${name#*/}echo ${name##*/}[root@web01 ~]# . a.shtmp/abc/1.txt1.txt[root@web01 ~]# vim 1.txt/tmp/abc/1.txt/root/2.txt/usr/local/src/3.txt[root@web01 ~]# vim a.sh#!bin/bashfor line in `cat 1.txt`;doecho ${line##*/}done[root@web01 ~]# . a.sh1.txt2.txt3.txt${变量名%字符串}:从变量结尾,删除最短匹配word的子串${变量名%%字符串}:从变量结尾,删除最长匹配word的子串#!bin/bashfor line in `cat 1.txt`;doecho ${line%%/*}echo ${line%/*}done[root@web01 ~]# . a.sh/tmp/abc/root/usr/local/src${变量名/匹配内容/替换内容}:使用string替换第一个pattern[root@web01 ~]# vim a.sh#!bin/bashread -p '请输入用户名:' nameecho ${name/ww/wsh}[root@web01 ~]# . a.sh请输入用户名:ww_fff_ggg_wwwsh_fff_ggg_ww${变量名//匹配内容/替换内容}:使用string替换所有pattern[root@web01 ~]# vim a.sh#!bin/bashread -p '请输入用户名:' nameecho ${name//ww/wsh}[root@web01 ~]# . a.sh请输入用户名:ww_ff_ww_ggwsh_ff_wsh_gg
给变量默认值
${变量名:-字符串}:如果parameter没被赋值或其值为空,就以string作为默认值,它不会赋值给变量[root@web01 ~]# echo $gender[root@web01 ~]# echo ${gender:-male}male[root@web01 ~]# gender=female[root@web01 ~]# echo $genderfemale[root@web01 ~]# echo ${gender:-male}female${变量名:=字符串}:如果parameter没被赋值或其值为空,就以string作为默认值,它会赋值给变量(用户没有传递值)[root@web01 ~]# echo $gender[root@web01 ~]# echo ${gender:=male}male[root@web01 ~]# gender=female[root@web01 ~]# echo $genderfemale[root@web01 ~]# echo ${gender:=male}female${变量名:?报错信息}:如果parameter没被赋值或其值为空,就以?后面的字符串作为报错输出[root@web01 ~]# unset gender[root@web01 ~]# echo ${gender:?male}-bash: gender: male${变量名:+字符串}:如果parameter没被赋值或其值为空,就什么都不做,否则用string替换变量内容[root@web01 ~]# gender=female[root@web01 ~]# echo ${gender:+wsh}wsh
直接赋值: name=wsh间接赋值:将一个命令执行的结果赋值给一个变量,IP=`ifconfig eth0|awk 'NR==2{print $2}'`交互赋值:read -p '请输入xxx' 变量名传参赋值:执行脚本的时候,将需要传递的变量值,写在脚本的后面 $1 $2 $3
read:read 选项 变量名read 选项 -p '一句话' 变量名## 选项-p:打印一句话-s:不显示输入内容-t:设置超时时间-a:将后面的结果放入数组[root@web01 ~]# vim a.sh#!bin/bashpasswd=123read -p 'm01 login:' nameread -s -p 'password:' passif [ $pass == $passwd ];thenecho '登录成功'elseecho '密码错误'fi[root@web01 ~]# . a.shm01 login:wwwpassword:密码错误[root@web01 ~]# . a.shm01 login:wwwpassword:登录成功[root@web01 ~]# vim a.sh#!bin/bashpasswd=123read -p 'm01 login:' -a nameread -t 5 -s -p 'password:' passif [ $pass == $passwd ];thenecho '登录成功'echo $nameelseecho '密码错误'fi[root@web01 ~]# . a.shm01 login:wwwpassword:-bash: [: ==: unary operator expected[root@web01 ~]# . a.shm01 login:www wsg ww rrrpassword:登录成功www
## 字符串类型赋值:name='字符串'取值:$name## 整型age=18## 数组类型赋值:list=(python java golang shell)list[0]='abc'list[1]='efg'list[2]='hij'list[3]='xyz'取值:${list[0]}${list[1]}${list[2]}${list[3]}list=(python java golang shell)echo $listecho ${list[1]}echo ${list[2]}echo ${list[3]}-------------------list[0]='abc'list[1]='efg'list[2]='hij'list[3]='xyz'list=(python java golang shell)echo $listecho ${list[1]}echo ${list[2]}echo ${list[3]}--------------------------list=(python java golang shell)list[0]='abc'list[1]='efg'list[2]='hij'list[3]='xyz'echo $list ${list[1]} ${list[2]} ${list[3]}----------循环数组------------------[root@web01 ~]# vim a.sh#!bin/bashlist=(python java golang shell)for yuansu in ${#list[*]};doecho $yuansudone[root@web01 ~]# . a.sh4echo ${#list[*]} // 数组中元素的个数
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号