shell变量的学习方式是什么?
1、Shell 变量?
用一个固定的字符串去表示不固定的内容
2、变量的类型
1、自定义变量
定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115 引用变量: $变量名 或 ${变量名} 查看变量:echo $变量名 set(所有变量:包括自定义变量和环境变量)取消变量:unset 变量名作用范围:仅在当前Shell中有效
示例:
#!/bin/bash
xihongshi=7
mogu=6
huluobo=8
echo 今日菜价:
echo
echo 西红柿:${xihongshi}¥ 一斤
echo 蘑菇:${mogu}¥ 一斤
echo 胡萝卜:${huluobo}¥ 一斤
echo
echo 欢迎买菜!!! 下次便宜点!!
2、环境变量
定义环境变量:
方法一 export back_dir2=/home/backup
方法二 export back_dir1 将自定义变量转换成环境变量
引用环境变量:$变量名 或 ${变量名}
查看环境变量:echo $变量名 env 例如 env | grep back_dir2set
取消环境变量:unset 变量名 变量作用范围:在当前Shell和子Shell有效
3、位置变量
主要是在脚本执行后加参数!!!
$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
示例:
#!/bin/bash
echo 我是谁:$0
echo 我的第一个位置是: $1
echo 我的第二个位置是: $2
echo 我的年龄是:$1
echo 我的名字是:$2
echo 我的学校是:$3
echo 位置变量我学会了!!
4、预定义变量
$0 脚本名(自己本身) $*所有的参数* "$" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数$@ 所有的参数 "$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数$# 参数的个数$$当前进程的PID$! 上一个进程的pid$? 上一个命令的返回值 0表示成功
示例:
#!/bin/bash
echo "我的脚本是存在的: $0"
echo "我的所有参数为: $*"
echo "我的所有参数为: $@"
echo "我的参数个数为:$#"
echo "我的系统当前pid为:$$"
sleep 1000 &
echo "我的系统上一个pid为:$!"
echo pwd
echo "我上一个命令: $?"
示例1:
# vim test.shecho
"第2个位置参数是$2"echo
"第1个位置参数是$1"echo
"第4个位置参数是$4"echo
"所有参数是: $*"echo
"所有参数是: $@"echo
"参数的个数是: $#"
echo "当前进程的PID是: $$"
echo '$1='$1
echo '$2='$2
echo '$3='$3
echo '$*='$*
echo '$@='$@
echo '$#='$#
echo '$$='$$
3、变量的赋值方式
1、显式赋值
变量名=变量值
示例:
ip1=192.168.1.251
school="BeiJing 1000phone" ' '
today1=`date +%F` 截取命令中本身含义
today2=$(date +%F) 截取命令中本身含义
2、read 从键盘读入变量值
read 变量名
read -p "提示信息: " 变量名
read -t 5 -p "提示信息: " 变量名
read -n 2 变量名
read: 用法:read -ers -d 分隔符 -n 读取字符数 -p 提示符 -u 文件描述符
-s 不显示输出内容
stty -echo (stty echo) 命令行影藏输入
示例3
#!/bin/bash
read -p "请输入你的姓名:"
nameread -p "请输入你的密码:"
passecho
echo 你的姓名是:$name
echo 你的密码是: $pass
#!/bin/bash
read -p "请输入你的姓名:" name
read -s -p "请输入你的密码:" passecho
echo 你的姓名是:$name
echo 你的密码是: $pass
[root@qfdeu ~]# vim first.sh
back_dir1=/var/backup
read -p "请输入你的备份目录: " back_dir2
echo $back_dir1
echo $back_dir2
[root@qfdeu ~]# sh first.sh
示例4:
[root@qfdeu ~]# 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
[root@qfdeu ~]# chmod a+x ping2.sh
[root@qfdeu ~]# ./ping.sh
4、定义引用变量
" " 弱引用
' ' 强引用
[root@qfdeu ~]# school=1000phone
[root@qfdeu ~]# echo "${school} is good"
1000phone is good
[root@qfdeu ~]# echo '${school} is good'
${school} is good
(反引号)命令替换 等价于 $() 反引号中的Shell命令会被先执行
[root@qfdeu ~]# touch `date +%F`_file1.txt
[root@qfdeu ~]# touch $(date +%F)_file2.txt
[root@qfdeu ~]# disk_free3="df -Ph |grep '/$' |awk '{print $4}'" # 错误
[root@qfdeu ~]# disk_free4=$(df -Ph |grep '/$' |awk '{print $4}')
[root@qfdeu ~]# disk_free5=`df -Ph |grep '/$' |awk '{print $4}'`
5、变量的运算
1、整数运算
方法一:expr
[root@qfdeu ~]# expr 1 + 2
[root@qfdeu ~]# expr $num1 + $num2 + - \* / %
方法二:$(())
[root@qfdeu ~]# echo $(($num1+$num2)) + - * / %
[root@qfdeu ~]# echo $((num1+num2))
[root@qfdeu ~]# echo $((5-3*2))
[root@qfdeu ~]# echo $(((5-3)*2))
[root@qfdeu ~]# echo $((2**3))
[root@qfdeu ~]# sum=$((1+2)); echo $sum
方法三:$[]
[root@qfdeu ~]# echo $[5+2] + - * / %
[root@qfdeu ~]# echo $[5**2]
方法四:let
[root@qfdeu ~]# let sum=2+3; echo $sum
[root@qfdeu ~]# let i++; echo $i
let a+=2 //和a=a+2的效果一样
+= 加等
*= 乘等
-= 减等
/= 除等
%= 模等
2、小数运算
[root@qfdeu ~]# echo "2*4" |bc
[root@qfdeu ~]# echo "2^4" |bc
[root@qfdeu ~]# echo "scale=2;6/4" |bc
[root@qfdeu ~]# awk 'BEGIN{print 1/2}'
[root@qfdeu ~]# echo "print 5.0/2" |python
随机数: $RANDOM
6、变量截取
1、匹配截取
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${#url} # 获取变量值的长度15
[root@qfedu ~]# echo ${url} # 标准查看
www.sina.com.cn
[root@qfedu ~]# echo ${url#*.} # 从前往后,最短匹配
sina.com.cn
[root@qfedu ~]# echo ${url##*.} # 从前往后,最长匹配 贪婪匹配
cn
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url}
www.sina.com.cn
[root@qfedu ~]# echo ${url%.*} # 从后往前,最短匹配
www.sina.com
[root@qfedu ~]# echo ${url%%.*} # 从后往前,最长匹配 贪婪匹配
www
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url#a.}
www.sina.com.cn
[root@qfedu ~]# echo ${url#*sina.}
com.cn
[root@qfedu ~]# echo $HOSTNAME
qfedu.1000phone.com
[root@qfedu ~]# echo ${HOSTNAME%%.*}
qfedu
2、索引及切片
[root@qfedu ~]# echo ${url:0:5}
[root@qfedu ~]# echo ${url:5:5}
[root@qfedu ~]# echo ${url:5}
3、"内容"的替换
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url/sina/baidu}
www.baidu.com.cn
[root@qfedu ~]# url=www.sina.com.cn
[root@qfedu ~]# echo ${url/n/N}
www.siNa.com.cn
[root@qfedu ~]# echo ${url//n/N} 贪婪匹配
www.siNa.com.cN
4、变量的替代
[root@qfedu ~]# unset var1
[root@qfedu ~]#
[root@qfedu ~]# echo ${var1}
[root@qfedu ~]# echo ${var1-aaaaa}
aaaaa
[root@qfedu ~]# var2=111
[root@qfedu ~]# echo ${var2-bbbbb}
111
[root@qfedu ~]#
[root@qfedu ~]# var3=
[root@qfedu ~]# echo ${var3-ccccc}
5、${变量名-新的变量值}
变量没有被赋值:会使用“新的变量值“ 替代
变量有被赋值(包括空值): 不会被替代
[root@qfedu ~]# unset var1
[root@qfedu ~]# unset var2
[root@qfedu ~]# unset var3
[root@qfedu ~]#
[root@qfedu ~]# var2=
[root@qfedu ~]# var3=111
[root@qfedu ~]# echo ${var1:-aaaa}
aaaa
[root@qfedu ~]# echo ${var2:-aaaa}
aaaa
[root@qfedu ~]# echo ${var3:-aaaa}
111
6、${变量名:-新的变量值}
变量没有被赋值(包括空值):都会使用“新的变量值“ 替代
变量有被赋值: 不会被替代
[root@qfedu ~]# echo ${var3+aaaa}
[root@qfedu ~]# echo ${var3:+aaaa}
[root@qfedu ~]# echo ${var3=aaaa}
[root@qfedu ~]# echo ${var3:=aaaa}
[root@qfedu ~]# echo ${var3?aaaa}
[root@qfedu ~]# echo ${var3:?aaaa}
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14