shell脚本的执行
1、当脚本文件本身没有可执行权限(文件x位为-号位)
bash script-name或 sh script-name
2、路径+脚本名
. /path/script-name
3、在当前shell脚本中加载另一个shell脚本
source /path/script-name 或 . /path/script-name (点号与脚本名之间有空格)
shell变量
1、变量的定义
格式:变量名=值
变量名=变量
变量名要求:字母开头,由字母、数字、下划线组成。
2、位置变量:通过命令行给程序传递执行参数。
./script-name 参数1 参数2 参数3
$n 取当前执行shell脚本的第n个参数值,n=1~9,如果n>9,用大括号括起来,如${10} ${10}就等于shell脚本第10个参数值。
$@ 这个程序中所有参数。(这是将参数传递给其他程序的最佳方法,因为它会保留所有内嵌在每个参数里的空白)。
3、Bash预定义变量
$? 获取上一个执行命令的返回值(0为成功,非零为执行命令未成功)。
$$ 获取当前shell脚本的进程号(PID)。
$# 获取当前shell脚本命令行中参数的总个数。
$0 (n=零时)取脚本路径和名称。
$* 所有位置参数的内容。
if条件语句
if [ $? -eq 0] #上一个命令执行后的返回值是否等于0;if [ $? -ne 0 ]上一个命令执行后的返回值是否不等于0
then
#指令
fi
while循环按行读文件的方式
方法一:
cat file_path | while read line
do
#执行命令
done
方法二:
while read line
do
#执行命令
done < file_path
for循环列表取值循环
for 变量 in 变量取值列表
do
#执行命令
done
for循环与while循环的按次数循环,跟C语言类似
for((i=1;i<=10;i++))
do
( #while循环
a=1
while((a<=4))
do
e=$a
echo "a=$e" #这里并不会赋值
((a++))
done
)
done
break、continue、exit、return的区别
break n #如果省略n,表示跳出整个循环,n表示跳出循环的层数。
continue n #如果省略n,表示跳过本次循环,n表示跳到第n层继续循环。
exit n #退出当前shell程序,n可以省略,n为本程序退出后返回的参数,也可以在下一个shell里通过 “$?” 接收 exit n 的 n 值
return n #用于在函数里,n 作为函数的返回值。以在下一个shell里通过 “$?” 接收 retern n 的 n 值
把shell脚本改选成标准rpm脚本:
#!/bin/bash
#script-name
#chkconfig:2345 90 20
#description: script-name server daemon
通过service命令脚本进行开启和关闭:
linux的快捷目录:/etc/rc.d/init.d
service script-name start|stop|restart
通过chkconfig命令把shell脚本设置开机自启:
查看:chkonfig --list script-name
设置:chkconfig script-name on
chkconfig script-name off
函数定义
function menu(){
echo 'helloward,bash!';
}
shell脚本菜单界面编写
一、cat命令的heredoc的使用方法
cat<<eof
#$name输出内容
eof
二、字符输出,颜色控制
echo -e " 33[30;47m test 33[0m"
三、while死循环
while true
do
#执行命令
done
四、case条件语句
例: 写一个shell脚本,传入一个参数(字母),判断传入的字母是大小还是小写
shell脚本调试
-n选项只做语法检查,而不执行脚本。
sh -n script_name.sh
跟踪调试
sh -x script_name.sh
进入调试模式后,Shell依次执行读入的语句,产生的输出中有的带加号,有的不带,带加号表示该条语句是Shell执行的。不带加号表示该语句是Shell产生的输出。
在调试过程中可以按Ctrl + Z中断调试,观察结果,然后再按fg键继续调试即可。