shell脚本教程--Bash shell--2.shell 变量

一、shell技术

2.shell 变量

shell变量使用一个特定的字符串表示不固定的内容

$variable引用变量的值

#!/bin/bash # "#!"she bang 解释用哪个执行
ip=127.0.0.1 #本地还回
ping -c1 $ip &>/dev/null && echo "$ip is up " ||echo "$ip is down";

2.1自定义变量

定义变量: 变量名=变量值 变量名必须是以字母或下划线开头,区分大小写。如:ip=127.0.0.1

引用变量: 变 量 名 或 变量名 或 {变量名}

查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)

取消变量: unset变量名

作用范围: 仅在当前shell有效

#!/bin/bash
ip=127.0.0.1 #本地还回#变量和等号和值之间不能有空格#显示赋值 

ping -c1 $ip &>/dev/null
if [ $? -eq 0 ];then#注意空格 ,否则出错
	echo "ip is up"
else 
	echo "ip is down"
fi

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Wqwg726-1618845216332)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210419162706663.png)]

#!/bin/bash
read -p "please input a ip:	"ip #从键盘读取

ping -c1 $ip &>/dev/null
if [ $? -eq 0 ];then#注意空格 ,否则出错
	echo "ip is up"
else 
	echo "ip is down"
fi
#!/bin/bash
ping -c1 $1 &>/dev/null
if [ $? -eq 0 ];then#注意空格 ,否则出错
	echo "$1 is up"
else 
	echo "$1 is down"
fi

$1与$2表示脚本执行时跟的变量。

如:

./ping02.sh 127.0.0.1 127.0.0.2
			$1         $2

显示如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qW0ZJNn2-1618845216337)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210419164525939.png)]

2.2环境变量

定义环境变量:方法一 expor back_dir2=/home/backup

​ 方法二 export back_dir1 将自定义变量转换成环境变量

引用环境变量: 变 量 名 或 者 变量名或者 {变量名}

查看环境变量:echo $变量名 env 例如env |grep back_dir2

env显示所有环境变量

取消环境变量:unset变量名

变量作用范围:在当前shell和子shell有效

一个脚本用另个脚本里变量:

方法一:另一个脚本变量设为全局变量

方法二:在一个脚本里加载另一个脚本

#!/bin/bash
. 1.sh #v1在1.sh里#当前shell 执行
echo -e "$v1"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QBTdSqap-1618845216344)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210419170715903.png)]

如上图所示,如果在1.sh与2.sh中用到public.sh,可以直接在1.sh与2.sh中添加. public.sh

2.3位置变量

$1 $2 $3 $4 ${5} 与上面的 $1和$2一样

2.4预定义变量
$0脚本名
$*所有的参数
$@所有的参数
$#参数的个数
$$当前进程的PID
$!上一个后台进程的PID
$?上一个命令的的返回值 0表示成功

测试脚本:

#!/bin/bash
#如果脚本没有参数
if [ $# -eq 0 ]; then
	echo -e "usage: `basename $0` file" #反引号,执行引号里面命令
	exit
fi
if [ ! -f $1 ]; then
	echo "error file"
	exit
fi

for ip in `cat $1`
do
	ping -c1 $ip &>/dev/null
	if [ $? -eq 0 ];then #if后面有空格
		echo "$ip is up"
	eles
		echo "$ip is down"
	fi
done

#反引号,执行引号里面命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pThsKz7K-1618845216350)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210419221429748.png)]

basename 基本文件名

dirname 基本目录名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FyniRZzQ-1618845216353)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210419212734026.png)]

2.5 显示赋值

变量名=变量值

示例:

ip=127.0.0.1

school=“HDU_University”

today1=`date +%F`

today2=$(date +%F)

2.6read从键盘读入变量值

read 变量名

read -p “提示信息:” 变量名

read -t 5 -p “提示信息:” 变量名 //等待5s时间

read -n k 变量名 //需要k个字符

2.7""与’'的区别

""弱引用

''强引用

示例:

name="mary" ;boy1="$name is good";boy2='$name is good'boy1=mary is good,boy2=$name is good;

touch ` date +%F`_file_txt

2.8变量运算

2.8.1整数运算方法一expr

expr 1+2

expr v 1 + v1+ v1+v2

expr v 1 ∗ v1\\* v1v2

2.8.2整数运算方法二$(())

echo ( ( (( ((v1+$v2))

echo $((v1+v2))

echo $((5-3*))

echo $(((5-3)*2))

echo $((5**3)) //5的立方n**k n的k方

sum=$((1+2))

2.8.3整数运算方法三$[]

和方法二一样

2.8.4整数运算方法四let

let sum=2+3;

let i++

示例:

#!/bin/bash
ip=1.0.0.127

i=1
while [ $i -le 5 ] #-le 表示小于#记住[] 两头都要用[]隔开
do
	ping -c1 $ip &>/dev/null
	if [ $? -eq 0 ];then
		echo "$ip is up"
	fi
	let i++
done

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2LOep1B-1618845216354)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210419225811091.png)]

2.9整数运算

echo “2*4” |bc

echo “2^4” |bc

echo “scale=n;6/4” |bc //小数点后n位

2.10变量的内容和替换

${#v1} 显示v1几个字符

删除变量部分(本身不变)

前删

name=www.baidu.com

echo ${name#*.} 删除www.

echo ${name##*.}删除www.baidu.//贪婪匹配删除到最后一个.之前

后删

echo ${name%.*}删除.com

echo ${name%%.*}删除.baidu.com//贪婪匹配删除到最后一个.之前

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ioxor7Pt-1618895412354)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210420125135074.png)]

切片

echo ${name:0:5}//取位置0开始后面5位

echo ${name:5:5}//取位置5开始后面5位

echo ${name:5}//取位置5后面所有

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3u66Jfc-1618895412368)(C:\Users\wei\AppData\Roaming\Typora\typora-user-images\image-20210420125539196.png)]

替换

echo ${name/baidu/sina}//把baidu替换为sina

echo ${name/b/B}//修改第一个字符b为B

echo ${name//w/W}//把所有w变成W

变量替代

变量已定义

${变量名-新的变量值} 变量没有被赋值:会被新值替代,否则不会被替代(包括空值)

${变量名:-新的变量值} 变量没有被赋值(包括空值):会被新值替代,否则不会被替代

2.11i++与++i

和C语言一样,不在赘述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值