自定义变量
用户自行定义的变量
变量赋值与变量引用
# 定义变量
website=www.baidu.com
切记,赋值语句=
左右不能空格
变量名必须以字母或下划线开头
# 引用变量
echo $website
echo "${website}_ping_result is up"
自定义变量作用范围:仅在当前shell中有效
read 在脚本中交互式接收用户输入值给变量
ping01.sh
#!/usr/bin/bash
read -p "Please input a website: " website
ping -c1 $website &>/dev/null && echo "$website is up." || echo "$website is down."
[root@iZwz9f92w7soch5m251ghgZ test]# sh ping01.sh
Please input a website: www.baidu.com
www.baidu.com is up.
[root@iZwz9f92w7soch5m251ghgZ test]#
[root@iZwz9f92w7soch5m251ghgZ test]# sh ping01.sh
Please input a website: www.baidu.test.com
www.baidu.test.com is down.
在脚本中使用执行脚本时的位置参数
ping02.sh
#!/usr/bin/bash
website=$1
ping -c1 $website &>/dev/null && echo "$website is up." || echo "$website is down."
[root@iZwz9f92w7soch5m251ghgZ test]# sh ping02.sh www.baidu.com
www.baidu.com is up.
[root@iZwz9f92w7soch5m251ghgZ test]# sh ping02.sh www.baidu.test.com
www.baidu.test.com is down.
$1 表示第1个位置变量,$2 表示第2个位置变量,$n 表示第n个位置变量
环境变量
一般为系统设置的变量,设置在环境变量配置文件中,如/etc/profile
,/etc/bashrc
,~/.bash_profile
,~/.bashrc
,~/.bash_logout
中
环境变量作用范围:全局,在任何地方都可以直接引用
环境变量的定义与使用
ping03.sh
:
#!/usr/bin/bash
ping -c1 $website &>/dev/null && echo "$website is up." || echo "$website is down."
[root@iZwz9f92w7soch5m251ghgZ test]# export website=www.baidu.com
[root@iZwz9f92w7soch5m251ghgZ test]#
[root@iZwz9f92w7soch5m251ghgZ test]# sh ping03.sh
www.baidu.com is up.
[root@iZwz9f92w7soch5m251ghgZ test]#
export
导入环境变量后,脚本中直接可引用环境变量env
查看当前所有环境变量
[root@iZwz9f92w7soch5m251ghgZ test]# env | grep website
website=www.baidu.com
脚本中引用其他脚本变量
setting.sh
:
#!/usr/bin/bash
site=http://www.baidu.com
ping04.sh
:
#!/usr/bin/bash
source ./setting.sh
ping -c1 $site &>/dev/null && echo "$site is up." || echo "$site is down."
在脚本中 source
激活其他脚本
[root@iZwz9f92w7soch5m251ghgZ test]# sh ping04.sh
http://www.baidu.com is down.
预定义变量
$0 脚本名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的PID
$! 上个后台进行的PID
$? 上一个命令的返回值,0表示成功
p.sh
:
#!/usr/bin/bash
echo "当前脚本名为\$0:$0"
echo "第2个位置参数是\$2:$2"
echo "所有参数是\$*:$*"
echo "所有参数是\$@: $@"
echo "参数的个数是\$#:$#"
echo "当前进程的PID是\$$:$$"
echo "上一个命令的返回值是\$?:$?"
[root@iZwz9f92w7soch5m251ghgZ test]# sh p.sh zhangsan lisi wangwu
当前脚本名为$0:p.sh
第2个位置参数是$2:lisi
所有参数是$*:zhangsan lisi wangwu
所有参数是$@: zhangsan lisi wangwu
参数的个数是$#:3
当前进程的PID是$$:10842
上一个命令的返回值是$?:0
数据运算
在shell中,所有的变量类型都是字符串
整数运算
expr : 支持运算符号 + - * / %
[root@iZwz9f92w7soch5m251ghgZ test]# expr 1 + 2
3
[root@iZwz9f92w7soch5m251ghgZ test]# expr 2 \* 3
6
$(()): 支持运算符号 + - * / %
[root@iZwz9f92w7soch5m251ghgZ test]# echo $((1+2))
3
[root@iZwz9f92w7soch5m251ghgZ test]# echo $((2*3))
6
$[]: 支持运算符号 + - * / %
[root@iZwz9f92w7soch5m251ghgZ test]# echo $[1+2]
3
[root@iZwz9f92w7soch5m251ghgZ test]# echo $[2*3]
6
let: 支持运算符号 + - * / %
[root@iZwz9f92w7soch5m251ghgZ test]# let sum=2*3
[root@iZwz9f92w7soch5m251ghgZ test]# echo $sum
6
小数运算
[root@iZwz9f92w7soch5m251ghgZ test]# echo "2+3.5"|bc
5.5
字符串运算
${ #var }字符串长度
[root@iZwz9f92w7soch5m251ghgZ test]# url=www.sina.com.cn
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${#url}
15
${ var# } 字符串删除:从前往后,最短匹配
[root@iZwz9f92w7soch5m251ghgZ test]# url=www.sina.com.cn
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url#*.}
sina.com.cn
${ var## } 字符串删除:从前往后,最长匹配
[root@iZwz9f92w7soch5m251ghgZ test]# url=www.sina.com.cn
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url##*.}
cn
${var%} 字符串删除:从后往前,最短匹配
[root@iZwz9f92w7soch5m251ghgZ test]# url=www.sina.com.cn
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url%.*}
www.sina.com
${var%} 字符串删除:从后往前,最长匹配
[root@iZwz9f92w7soch5m251ghgZ test]# url=www.sina.com.cn
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url%.c*}
www.sina.com
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url%%.c*}
www.sina
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url%%.*}
www
${var::} 字符串截取:索引及切片
[root@iZwz9f92w7soch5m251ghgZ test]# url=www.sina.com.cn
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url:0:5}
www.s
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url:5}
ina.com.cn
[root@iZwz9f92w7soch5m251ghgZ test]# echo ${url:5:5}
ina.c
${var/source/target} 字符串替换,替换1次
[root@iZwz9f92w7soch5m251ghgZ ~]# url=www.sina.com.cn
[root@iZwz9f92w7soch5m251ghgZ ~]# echo ${url/n/N}
www.siNa.com.cn
${var//source/target} 字符串替换,全部替换
[root@iZwz9f92w7soch5m251ghgZ ~]# url=www.sina.com.cn
[root@iZwz9f92w7soch5m251ghgZ ~]# echo ${url//n/N}
www.siNa.com.cN
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。