shell——变量

在脚本中使用变量

命名方式与C一样,区分大小写
$变量名 在脚本中使用
unset 变量名 可取消变量
ps:type 字符串 可查询该字符串类型

$?表示上一个命令的返回值

#!/usr/bin/bash
ip=10.18.42.xxx
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ]; then  这里的;不可少,因为要分割命令 且其中方括号内表示判断上一条命令的返回值是否为0
	echo "$ip is up"
else
	echo "$ip is down"
fi

read 从键盘读入

如下例子 但是这种输入需在脚本运行以后再输入

#!/usr/bin/bash
read ip 或者 read -p "Please input a ip: " ip  其中-p参数,允许在read命令行中直接指定一个提示
ping -c1 $ip &>/dev/null
if [ $? -eq 0 ]; then  这里的;不可少,因为要分割命令 且其中方括号内表示判断上一条命令的返回值是否为0
	echo "$ip is up"
else
	echo "$ip is down"
fi

read 可以一次键入多个变量 用空格分隔即可
read a b c d e f g

位置变量 $1 $2 $3

(这个是无需自己定义,系统内定的规定)
即将命令行脚本命令之后的第一个参数传给$1 第二个参数传给$2

环境变量和自定义变量

相当于C中的全局变量和局部变量
ip10 = xxx 自定义变量(局部)
export ip10 = xxx 环境变量(全局)
也可将已存在的自定义变量转为全局变量: export ip 即可

可以在脚本中包含另一个脚本的所有内容(这样就无需把需要共享的变量都转化为环境变量)

public.sh
(定义变量=处不能有空格!!!!!)

#!/usr/bin/bash
ip10=xxx(定义变量=出不能有空格!!!!!)

a.sh

#!/usr/bin/bash
. public.sh(.后必须有空格)
echo $ip10

env显示当前所有环境变量

ps:

最好甚至一定要在用变量的时候加{} 比如${ip}
这样就可以避免很多歧义 而且${#ip}可以查看变量的字符串长度

预定义变量

$0 脚本名(即文件名)
$* 所有的参数
$@ 所有的参数
$# 参数的个数(可看当前执行脚本的)
$$ 当前进程的PID
$! 上一个后台进程的PID
$? 上一个命令的返回值,0表示成功,非零表示失败

ps:-f 表示判断是不是文件

注意

设 ip=123
" “弱引用 双引号内会显示变量的值 如"$ip" 就会显示123
’ '强引用 而单引号内不会显示变量的值 如 ‘$ip’ 就会显示$ip
但是” " 里面要打印!之类的特殊字符就不好处理,最好用" "也用’ ’

` `命令替换 这个等价于$()

反引号(` `或者$())中的shell命令会先被执行
例如mkdir $(date)ppp 以当日日期命名文件夹

变量的运算

expr 运算式
$((运算式))
$[运算式]
let 运算式
-le 小于等于
echo “scale=2;6/4” |bc其中scale=2保留两位小数

内容的删除替换代替

删除但原变量没变

url=www.sss.xxx
echo ${url#.}

索引 切片
echo ${url:0:5}
取从第0个字符开始后的5个字符
echo ${url:5}
取从第5个字符开始后所有字符

替换
echo ${url/n/N} 将url中出现的第一个n改为N
echo ${url//n/N }将url中出现的所有n改为N

替代
${var1 -aaaaa} 若var1没有被赋值 则默认为aaaaaa
若var1有赋值 即便是空值也不会被aaaaaa替代

${var2:-aaaaa} 若var2没有被赋值 则默认为aaaaaa
若var2有赋值 是空值就会被aaaaaa替代

${var3+aaaaa}
${var3:+aaaaa}

${var3=aaaaa}
${var3:=aaaaa}

${var3?aaaaa}
${var3:?aaaaa}

++

和C一样 不多说

其他 各种符号

read -p "input number:" num
if[[ !"$num"=~^[0-9]+$ ]];then  检查是不是数字
	echo "你输入的不是数字,程序退出!!!"
	exit
fi

echo ccc

调试脚本:
sh -n 02.sh 仅调试syntax error
sh -vx 02.sh 以调试的方式执行,查询整个执行过程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值