14-(1,2)shell脚本编程详解(笔记)

 

 

1.什么是shell脚本

shell有很多种脚本:bash,csh,ksh等等。不同的shell语法不同。
脚本中的#表示注释,但是第一行中的#有特殊意义:
如果第一行中第一个字符非#,表示这是一个bash脚本。第一个字符是#,但第二个字符不是!,表示这是一个csh脚本。第一个字符是#,且第二个字符是!,举例,如果第一行为#!/usr/bin/python2.0表示调用其后指定的/usr/bin/python2.0程序来执行以下脚本。
#!/bin/sh是bash的一个软链接。#!/bin/sh=#!/bin/bash

2.bash脚本不支持正则表达式,只支持通配符。正则表达式可以通过grep,vi,sed和awk命令支持。

3.与shell脚本进行交互

使用参数来传递内容:
$1,$2...表示该shell脚本接收的第一个和第二个参数,以此类推。
$# 表示实际调用该shell脚本用户输入参数的数目
$? 表示shell脚本中$?的上一个命令是否成功执行.0成功,非0失败。
$$ 表示该shell脚本的进程id,即pid


使用命令来交互
read 读入数据给变量 例子:read -p "please input your name:" AAA, -p表示先打印出字符串 然后用户输入名字给AAA变量
echo 输出数据
printf 输出数据 printf与echo功能类似,printf控制的字符格式功能要多一些。例子 printf "/t hello world /t /n"

4.调用shell脚本的三种方式

a.输入脚本的绝对路径或相对路径

/root/backup.sh
./backup.sh

b.指定定要执行的shell(bash或tcsh)

bash /root/backup.sh

c.在脚本的路径前加.

.  /root/backup.sh
.  ./backup.sh

第三种与前两种的差别是,c执行方式是在当前shell执行,a,b是开一个子shell执行。如果是a,b两种方式的话,在里面有export x=2的脚本,其父shell无法读取x变量值。而c方式可以读取脚本里面赋值的变量。通常在我们需要调用脚本中的变量,函数时使用c方式。

 

5.bash脚本的流程控制

a.条件判断控制:

[],&&, ||
if
case

[abc]   可能是a,b,c字符中的任一个
[ abc ] []里面两边有空格,判断a,b,c变量的真假也就是是否有ascii码的值,0为true,1为false
例子
[ abc ],echo $?    显示0
[  ],echo $?       中括号里面是空值,显示1
 

&& 表示前面值为真(即0)时执行&&右边的命令,否则不执行右边命令   

||      表示前面值为假(即1)时执行||右边的命令,否则不执行右边命令      

    


if使用例子
read AAA
if [ $AAA = feifei ]
then
echo hello feifei
elif[ $AAA = root ]
then echo hello root
else echo 'get out!'

fi

if,then,elif,else可自由多次组合。

题外话
bash -v  ./test.sh 起调试作用,表示用bash执行./test.sh脚本,执行过程可见.

bash -vx ./test.sh 可以看更详细的调试过程,-x可以显示脚本里面各变量的值。

 

case多重判断使用例子:

read AAA
case $AAA in
shrek )
echo hello shrek
echo nice to meet you
;;
root )
echo hello root
echo 'I miss you!'
;;
* )
echo get out!
esac

b.循环控制 for while until break continue

for循环使用

实例1

#!/bin/bash

AAA=`pgrep httpd` --讲httpd的进程idPID赋值给AAA
[-z "$AAA" ] && echo 'httpd is not running!' &&exit  --有可能AAA是多个PID加空格
for i in $AAA
do
kill -9 $i  --do,done之间组成循环体
done
echo httpd is killed


实例2
for aaa in 111 222 333 /etc/profile.d/*.sh
do
echo $aaa

done

实例3

for aaa in `seq 1 100` --产生1到100序列,脚本执行100次
do
echo -n $aaa;  -- -n为连续输出,不回车
sleep 1;        --休息一秒

done

while循环

实例1

i=0
while [ $i -lt 100 ]
do
i=$[$i+1]
echo -n "$i "

done

实例2

while true
do
read AAA
if[ "$AAA" = "exit" ]
then
 break
fi

done

 

until循环,与while的区别是条件为false时执行,为true时退出循环

实例

i=0
until [ $i -gt 100 ]
do
i=$[$i+1]
echo -n "$i "

done

 

 

6.函数的使用

函数的定义:
Myfunction()
{
}
取消函数使用:

unset myfunction 或 unset 变量名

如何给函数传递参数和获得返回值?Bash中函数参数的定义并不需要在函数定义处就指定,而只需要在函数被调用时用BASH的保留变量$1$2...来引用就可以了;Bash的返回值可以用return语句来指定返回一个特定的整数,如果没有return语句显示的返回一个返回值,则返回值就是该函数最后一条语句执行的结果(一般为0,如果执行失败返回错误码)。return的返回值只能是0~256之间的一个整数,函数的返回值在调用该函数的程序体中通过$?保留字来获得。

实例1:计算平方的函数
square(){
aaa=$1^$1
return $aaa
}
square $1
result=$?
echo $result
exit 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值