参数,选项
模拟 ls -a
ls -l
ls -la
eg:
#!/bin/bash
if [ $# -lt 2 ]
then
echo “the grgument less than 2”
exit 1
fi
case $1 in
-a)
args=” -a $2″
;;
-l)
args=” -l $2″
;;
-al|-la)
args=” -al $2″
;;
*)
echo “option is error”
exit 2
;;
esac
ls $args
专门处理参数选项的命令
getopts
输入输出
echo
printf 带格式输出
eg:
#!/bin/bash
var=3.141592654
str=”hello word”
printf “info:%+016s\n” “$str”
printf “data:%+016f\n” “$var”
输入
read
<
文件描述符
一个编号就代表了一个文件
标准输入STDIN 0
标准输出STDOUT 1
标准错误 STDERR 2
今天早上睡着了,都没有记录笔记。。。累死个人~!!!
type 查看命令是内部命令还是外部命令
exec 参数
功能:当SHELL 执行到exec语句时,不会去创建新的子进程,而是转去执行制定的命令,当指定的命令执行完时,该进程,也就是最初的SHELL 就终止了,exec 后面的语句就不再执行了。
重定向来至SHELL 脚本内部的文件描述符
:>a.txt 也是清空a.txt
eval 当SHELL特殊字符通过变量替换或命令替换被插入时,要用到eval
eg:
OUTPUT=”>a.txt”
eval echo hello $OUTPUT
readonly 定义只读变量 使用unset不能修改,var=new 也不修改不了
shift 语句
shift 语句在每使用一次时,位置变量向左移动一位,直到减为0
wait 语句
SHELL等待后台启动的所有子进程结束,返回值总为真
eg:
#!/bin/bash
date
sleep 5 &
cal
echo “finished”
wait
set 语句
在shell脚本的任何地方启动或取消调试
getopts 处理符合的选项
test 条件判断
trap 和信号有关的东西
内置符号命令
. 执行文件
:空操作,返回状态值为0
&后台工作
$()命令替换
(())算术表达式计算,let(被括起来值中包含=时使用)
$(())算术扩展(不用于被括起来的值中,包括=的情形)
[]同test
[[]]条件表达式 类似与[]
expr 也是算术运算
shell 分组的方法
() 新开一个小shell 顺序执行()里面的指令,(cmd1;cdm2;cdm3;)
{} 在当前的SHEL顺序执行当前的SHELL命令{cmd1;cmd2,cmd3;}
函数
函数名 (){
函数体
}
function 函数名 () {
函数体
}
eg:
#!/bin/bash
function fun(){
date
echo “this is a function!”
cal
}
fun
不同文件内函数调用
eg:
function2.sh
#!/bin/bash
i=0
compare(){
num1=$1
num2=$2
if [ $num1 -eq $num2 ]
then
echo “the two numbers is equal”
return 0
elif [ $num1 -lt $num2 ]
then
echo “the numbers of:$num2 bigest to the numbers of :$num1”
i=$num2
return 1
else
echo “the numbers of:$num1 biggest to numbers of :$num2”
i=$num1
return 2
fi
}
function3.sh
#!/bin/bash
. function2.sh
compare 10 20
调试
格式 bash –选择项
-n 测试SHELL 脚本的语法结构,只读取不执行
-x 进入跟踪方式,执行命令时把命令和它们的参数显示出来
-e 非交互式,如果一个命令失败就立即推出
-l交互式
-k从环境变量中读取命令的参数
-r 限制方式,不能执行如下操作…
-t 执行名后退出
-u 置换时把为设置的变量看作出错
-v verbose 当读入SHELL输入行时把他们显示出来
set 使用set命令,用户可以在shell脚本的任何地方启动或取消调试
启动:set –选择项
禁止:set +选择项
eg:
#!/bin/bash
num=1
sum=0
set -x
while [ $num -le 5 ]
do
sum=$(($sum+$num))
num=$(($num+1))
done
set +x
echo “sum:$sum”
信号处理
查看所有信号 kill -l
ps -e里出所有进程
ps -ef 所有进程的详细信息
trap – 重置所有信号