脚本运行
创建bash脚本(shell脚本)
1.创建脚本文件
指定命令解释器
注释
编写bash指令集合
2.修改权限
bash脚本执行
# ./scripts
# /shelldoc/scripts
# source ./scripts 使用当前shell执行 比如cd /tmp会改变当前shell环境,但是其他的方式不会
# bash scripts
变量置换
命令替换
[root@linux-server ~]# a=`date +%m%d`
[root@linux-server ~]# echo $a
1225
[root@linux-server ~]# a=$(date +%m-%d)
[root@linux-server ~]# echo $a
12-25
反引号亦可用$() 代替,取命令结果用。把命令的结果拿出来
变量替换
一 ${parameter:-word}
若 parameter 为空或未设置,则用 word 代替 parameter 进行替换,parameter 的值不变
# a=1
# unset b
# a=${b:-3}
# echo $a
3
# echo $b
#
若 parameter 不为空,则不替换,parameter 的值不变 # unset b
#
# a=1
# b=2
# a=${b:-3} # echo $a
2
# echo $b
2
#
二 ${parameter:=word}
若 parameter 为空或未设置,则用 word 代替 parameter 进行替换,parameter 的值改变
# a=1
# unset b
# a=${b:=3}
# echo $a
3
# echo $b
3
#
若 parameter设置了,则 不替换,parameter 的值不变
# a=1
# b=2
# a=${b:=3}
# echo $a
2
# echo $b
2
#
三 ${parameter:+word}
若 parameter 设置了,则用 word 代替 parameter 进行替换,parameter 的值不变 # a=1
# unset b
# a=${b:+3}
# echo $a
# echo $b
# a=1
# b=2
# a=${b:+3}
# echo $a
3
# echo $b
2
#
四 ${parameter:?message}
若 parameter 为空或未设置,则 message 作为标准错误打印出来,这可用来检查变量是否正确设置 # unset a
# ${a:?unset a}
-bash: a: unset a
变量替换-匹配截取
${变量#关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最短数据切除
${变量##关键词} 若变量内容从头开始的数据符合『关键词』,则将符合的最长数据切除
${变量%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最短数据切除
${变量%%关键词} 若变量内容从尾向前的数据符合『关键词』,则将符合的最长数据切除
${变量/旧字符串/新字符串} 若变量内容符合『旧字符串』则『第一个旧字符串会被新字符串替代』
${变量//旧字符串/新字符串} 若变量内容符合『旧字符串』则『全部的旧字符串会被新字符串替代』
索引及切片
[root@linux-server ~]# a=12345678
[root@linux-server ~]# echo ${a:5} #从第5位开始截取
678
[root@linux-server ~]# echo ${a:3:4} #从第3位开始截取,留下后四位的,剩下的都不要。
4567
[root@linux-server ~]# echo ${a:2:-1}
34567
[root@linux-server ~]# echo ${a:2:-2}
3456
[root@linux-server ~]# url=www.sina.com.cn
[root@linux-server ~]# echo ${#url} #获取变量的长度
15
[root@linux-server ~]# echo ${url} #正常显示变量
www.sina.com.cn
变量内容的删除
[root@newrain ~]# echo ${url#*.} 从前往后匹配到“.”最短匹配
sina.com.cn
[root@newrain ~]# echo ${url##*.} 从前往后匹配到“.”,最长匹配
cn
[root@newrain ~]# echo ${url%.*} 从后往前匹配到“.”,最短匹配
www.sina.com
[root@newrain ~]# echo ${url%%.*} 从后往前匹配到“.”,最长匹配
www
[root@newrain ~]# echo ${url#a.} #不加*
www.sina.com.cn
[root@newrain ~]# echo ${url#*a.} #加*
com.cn
参数解释:
*:表示全部字符。
%:最短尾匹配;
%%:最大尾匹配
从右往左
用冒号截取:echo $a: : :
从哪里截取留那里。
变量内容的替换
[root@linux-server ~]# a=123456123789
[root@linux-server ~]# echo ${a/1/} #第一次匹配的被替换
23456123789
[root@linux-server ~]# echo ${a/1/0} #第一次匹配到1替换成0
023456123789
[root@linux-server ~]# echo ${a//1/} #全局的匹配被替换
2345623789
[root@linux-server ~]# echo ${a//1/x} #全局匹配到1替换成x
x23456x23789
例:
file=/dir1/dir2/dir3/my.file.txt
${file#*/}: 拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}: 拿掉最后一条 / 及其左边的字符串:my.file.txt
${file#*.}: 拿掉第一个 . 及其左边的字符串:file.txt
${file##*.}: 拿掉最后一个 . 及其左边的字符串:txt
${file%/*}: 拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}: 拿掉第一条 / 及其右边的字符串:(空值)
${file%.*}: 拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}: 拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配;两个符号是最大匹配(贪婪匹配)。
basename & dirname
basename 命令
basename 是去除目录后剩下的名字
例:
[root@linux-server ~]# temp=/home/temp/1.test
[root@linux-server ~]# base=`basename $temp`
[root@linux-server ~]# echo $base
1.test
dirname 是取目录
例:
[root@linux-server ~]# temp=/home/temp/1.test
[root@linux-server ~]# dir=`dirname $temp`
[root@linux-server ~]# echo $dir
/home/temp