shell 变量

1. 自定义变量

定义变量: 变量名=变量值
eg:ip=192.168.1.14
引用变量:$变量名 或 ${变量名}
eg:$ip ${ip}
查看变量:echo $变量名
eg: echo ${ip}
取消变量: unset 变量名
eg: unset ip
作用范围: 仅在当前shell中有效

2.环境变量:

定义环境变量:法一: export ip=192.168.1.14
				法二:ip=192.168.1.14
					export ip
 查看当前环境变量: env | grep ip
# 读取变量 ip
read ip
# 提示读取
read -p "please input ip " ip
# 倒计时
read -t 5 -p "please input ip: " ip
#  限制宽度
read -n 2 ip

3. 多个脚本之间共享变量

eg: sc1.sh
ip=192.168.1.14
sc2.sh 脚本 要使用 sc1.sh 中变量
. sc1.sh  # 点 执行或 source 执行
echo ${ip}

4. 位置变量

$1 $2 $3 $4 $5 $6 $7 $8 $9 $(10]

5. 预定义变量

$0	    脚本名
$*		所有的参数
$@	    所有的参数
$#        参数的个数
$$       当前进程的PID
$!			上一个后台进程的PID
$?		上一个命令的返回值

basename  文件名 不包含 路径
dirname   文件路径
#!/bin/bash
# 参数个数为零
if [ $# -ef 0 ];then
	echo "usage: `basename $0` file"
	exit 
if
# 第一个参数不是文件
if [ ! -f $1 ];then
	echo "error file"
	exit
if
# ping 所有的 ip
for ip in `cat $1`
do
	ping -c1 $ip &>/dev/null
	if [ $? -ef 0 ];then
		echo "$ip is up."
	else
		echo "$ip is down"
	if
done

6. 强引用和弱引用、反引号和括号

“ ” 弱引用
' ' 强引用
school=1000p
# 打印结果 1000p is goof
echo "${school} is goog"
# 原样打印
echo '${school} is good'
`` 等价于$() : 反引号和括号中的命令会被先执行
touch `date +%F`_file1.txt
touch $(date +%F)_file2.txt

7. 变量的运算

1. 整数运算
	方法一:expr
		expr 1 + 2
		expr $num1 + $num2   
		+ - \* %
 	方法二:$(())  + - * /  %
 		echo $(($num1+$num2))
		echo $((num1+num2))
		echo $((5-3*2))
		echo $((2**3))
		sum=$((1+2));echo $sum
 方法三:$[]  + - * /  %
 		echo $[5+2]
 		echo $[5**2] 	
 方法四:let
 		let sum=2+3;echo $sum
 		let i++;echo $i	
#!/bin/bash
ip=10.18.42.1
for i in {1..5}
do
	ping -c1 $ip &>/dev/null
	if [ $? -eq 0 ];then
		echo "$ip is up..."
	fi
done
#!/bin/bash
ip=10.18.42.1
i=1
while [ $i -le 5 ]
do
	ping -c1 $ip &>/dev/null
	if [ $? -eq 0 ];then
		echo "$ip is up..."
	fi
	let i++
done

7. 小数运算

echo "2*4" | bc
echo "2^4" | bc
echo "scale=2;6/4" | bc
awk 'BEGIN{print 1/2}'
echo "print 5.0/2" | python

8. 变量内容 删除

url=www.baidu.com
echo ${#url}   # 获取变量的长度
echo ${url} # 标准查看
echo ${url#*.}  # 从前往后, 最短匹配
ehco ${url##*.} # 从前往后,最长匹配,贪婪匹配
echo ${url%.*}  # 从后往前,最短匹配
echo ${url%%.*} # 从后往前,最长匹配,贪婪匹配

9. 索引及切片

echo ${url:0:5}  # 索引0 开始向后 5个
echo ${url:5:5}  
echo ${url:5}

10.内容替换

echo ${url/baidu/google} 
echo ${url//n/N}  # 贪婪匹配

11.变量替代

echo ${var1}
echo ${var1-bbbb} # 若没有定义 var1 则默认值为bbbb
${变量名-新的变量值}
	变量没有被赋值:会使用 新的变量值 替代
	变量有被赋值(包括空值):不会被替代
${变量名:-新的变量值}
	变量没有被赋值:会使用新的变量值替代
	变量有被赋值(包括空值): 不会被替代
var=  # 空值
echo ${var:-aaa} # 空值不会被替代

echo ${var:+aaa}  #仅在变量非空才输出
echo ${var+aaa} #  就算变量为空也会输出

echo ${var3=aaa} # var3 不存在或 为空值 赋值 为aaaa
echo ${var3:=aaa} # var3 不存在 或者为空值

12. 条件测试

格式1:test 条件表达式
格式2: [ 条件表达式 ]
格式3:[[ 条件表达式 ]]
-e :文件或目录是否存在
-d: 是否是一个路径
-f:  是否存在,而且是文件
-r :  当前用户是否有读权限
-x:  是否有执行权限
-w: 是否有写权限
-L: 是否为一个存在的软链接

数值比较:
[ 1 -gt 10 ] 大于
[ 1 -lt 10 ] 小于
[ 1 -eq 10 ] 等于
[ 1 -ne 10] 不等于
[ 1 -ge 10] 大于等于
[1 -le 10] 小于等于

c语言风格的数值比较
	((1<2))
	((1==2))
	((1>2))
	((1>=2))
	((1<=2))
	((1!=2))
	((`id -u`>0))
	(($UID==0))

13. 是字符串比较

使用双引号
[ "$USER" = "root" ]
[ "$USER" == "root" ]
[ -z  $var ] #字符长度为0
[ -n $var ]  # 字符串长度不为0

# 条件测试  
[ 1 -lt 2 -a 5 -gt 10 ];echo $?
[ 1 -lt 2 -o 5 -gt 10 ];echo $?
#  双中括号用法
[[ 1 -lt 2 && 5 -gt 10 ]];echo $?
[[ 1 -lt -2 || 5 -gt 10 ]];echo $?
[[ "$USER" = ~ r ]];echo $?

14.总结

()  子shell中执行
(()) 数值比较,运算C语言
$()  命令替换
$(())  整数运算

{}
${}

[] 条件测试
[[]] 条件测试,支持正则  =~
$[]  整数运算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值