shell编程一
一、起步
新建脚本
vim test.sh
#!/bin/bash
date; who
echo '我的第一个"shell"脚本'
- 第一行指定shell,注释也用
#
- 第二行执行两个指令,用
;
分开,也开一用&&
- 第三行使用echo指定输出,如果输出内容有引号,使用单引号如此联合使用,echo默认回车,如果不想回车,添加
-n
选项
执行
方式一:
chmod +x test.sh
./test.sh
方式二:
sh test.sh
sh -x test.sh #输出执行
二、变量
shell脚本中可以使用系统变量和自定义变量。
- 声明变量:区分大小写,
变量名=值
之间没有空格 - 使用变量:
$变量
,在变量和其他字符紧临时,使用${}
把变量包起来 - 获取命令结果给变量,可以使用``,$() 示例:
#!/bin/bash
echo $JAVA_HOME
Var=123
var=456
echo ${var}--$Var
echo `pwd`
echo $(pwd)
结果
/usr/local/java/jdk1.8.0_91 456–123 /root /root
只读变量:
myUrl="http://www.w3cschool.cc"
readonly myUrl
myUrl="http://www.runoob.com"
删除变量
unset variable_name
二、输入输出重定向
输出
> 输入重定向
>> 追加方式
[root@zz01 home]# date >>/home/t.sh
[root@zz01 home]# cat t.sh
2016年 01月 04日 星期一 05:29:12 CST
2016年 01月 04日 星期一 05:29:40 CST
&»文件名把错误命令信息也写入文件 &>/dev/null把所有信息放入垃圾箱 ls »abc 2>cde 正确放入abc,错误放入cde文件
输入
<
:把文件内容给命令
三、数学运算
#!/bin/bash
a=`expr 1 + 1`
echo $a #2
# 注意下列的空格
expr 15 / 5 # 3
expr 10 / 6 # 1
expr 10 % 6 # 4
expr 10 \* 5 # 50
expr 10 - 5 # 5
expr 10 \> 9 # 1
expr 10 \< 9 # 0
echo "-----分割--------"
echo $[1 + 5] # 6
echo $[2 * 5] # 10
以上expr
和$[]
只支持整数,如果计算小数,需要用bc
yum install bc
#!/bin/bash
# scale 表示保留小数位数
echo $(echo "scale=4; 10 / 3" | bc) # 3.3333
echo `echo "scale=1;10.0 / 5" | bc` # 2.0
echo "-----下面给几个计算统一添加小数位--------"
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)
echo $var5 # 2813.9882
四、退出脚本
脚本或者命令执行结果可以使用$?
查看,正常退出时为0
,错误退出时为0--255
之间的错误码。
#!/bin/bash
pwd
echo ll执行状态码:$?
pwdd
echo sdf执行状态码:$?
exit 1
echo 这条命令不被输出
执行结果:
/root ll执行状态码:0 ./test.sh:行5: pwdd: 未找到命令 sdf执行状态码:127
再执行 echo $?
输出 1
exit 可以没有参数,为0,可以为1到255数字,可以为数字变量
默认情况下,执行到错误语句还会继续执行下面的脚本,如果想出现错误就停止,可以使用set -e
五、实例
删除某个目录下需要删除的文件
#!/bin/bash
set -e
BASE_DIR=$1
if [ "$1" == "" ] || [ "$1" == " " ]
then
echo "请输入目录作为参数"
exit 1
fi
files=`find "${BASE_DIR}" -regex '.*/\(service\|app\|session\|quartz\|env_.*\)\.properties'`
if [ "X${files}" == "X" ]
then
echo "没有相关文件"
exit 0
fi
for file in ${files}
do
rm -f ${file}
echo "remove ${file}"
done