linux系统shell脚本编写
一.脚本的编写
(1).由于项目中需要用到脚本去调Java的一个命令(keytool),我在这里简单说一下示例的脚本名称叫import.sh),编写完后,记得文件命名的格式加个.sh的后缀,一般脚本中有cd命令的要以点命令来进行调用shell脚本,所谓点命令就是source命令,一般可以用“.”号代替,详细的可以查阅linux命令的帮助文档
#本脚本做证书的导入
#这里是指定shell脚本的编译环境
#!/bin/bash
#配置Java环境。JAVA_HOME指定jdk路径
JAVA_HOME="/usr/bin/java/jdk1.7.0_79"
JAVA_OPTIONS=" -hotspot -Xms128m -Xmx512m "
CLASS_PATH=.;
#进入java的安全证书库内
cd /usr/bin/java/jdk1.7.0_79/jre/lib/security
#可以将任意的Java命令在这里执行比如javac,java,java -version都是可以的
keytool -import -alias certificate -keystore cacerts -file /home/admin/Desktop/CA/trust.cer -keypass changeit -storepass changeit
(2).终端中调用shell脚本
chmod +x import.sh
. ./import.sh
(第一行代码这里是给予脚本执行的权限,第二行中的“.”与”.”之间要留有空格。前面的点代表source命令。)
二.参数和变量设置
先讲单纯脚本内变量的定义
#!/bin/bash
a=520;
echo $a;
set 设置当前shell的变量
env 显示当前用户的变量
export 导出成用户变量
#!/bin/bash
var1=1;
var2=2;
var3=3;
set $var1,$var2,$var3 --设置first.sh这个脚本的参数变量为var1 var2 var3的值
echo $1;
可以看到结果是
[admin@localhost Desktop]$ ./b.sh
1,2,3
$0 此变量的值为:当前正在运行的脚本的名字
$# 此变量的值为:当前正在运行的脚本的参数的个数
$$ 此变量的值为:当前正在运行的脚本的进程号
$1 ,$2 ,$3… 此变量的值为:当前正在运行的脚本的一个变量的第n个参数
$* 此变量的值为:当前正在运行的脚本的一个变量的全部参数
$@ 此变量的值为:当前正在运行的脚本的一个变量的全部参数
$? 上个命令的退出状态,或函数的返回值。
推荐使用 $@
那么在调用脚本时候就可以传参./xx.sh a,b,c
这里a,b,c就是实际赋予脚本的值会分别传给$1 ,$2 ,$3进行调用
这里顺便讲下if和case(以前公司有用过就顺便演示下)
#脚本名称service——operate.sh
#!/bin/bash
if [[ $1 != device ]] && [[ $1 != tomc ]] && [[ $1 != kam ]] && [[ $1 != mysql ]] && [[ $1 != med ]] && [[ $1 != netw ]]
then
echo "Service error!"
exit 1;
elif [[ $2 != start ]] && [[ $2 != stop ]] && [[ $2 != restart ]]
then
echo "Operation error!"
exit 1;
fi
case $1 in
"netw")
case $2 in
*)
service network restart
if [[ "$?" != "0" ]]
then
echo Network restart Fail!
else
echo Network restart Success!
fi
esac
;;
"device")
(上面脚本启动的时候,传参进行调用,参数间使用空格分隔则tomc,start就会分别传给脚本中的 )
$1
$2
./service——operate.sh tomc start
if的语法:
if
条件
then
commands
else
commands
fi或者是另种形式:
if 条件
then
commands
elif 条件
then
commands
elif 条件
then
commands
….
else
commands
fi说明:条件中可以不止一条语句,如果有多条语句的话,用&& 连接起来
- case条件语句:
语法: case 条件 in
xxx)
commands;;
xxx)
commands;;
xxx)
commands;;
esac
暂且谈到这里有需要,会继续深入shell