shell编程-shell变量

自定义变量

用户自行定义的变量

变量赋值与变量引用

# 定义变量
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

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。
My Show My Code