一 Shell入门
Shell:命令解释器,识别用户输入的各种命令,传递给操作系统。作用类似于windows中的命令行,但shell比命令行更强大。在linux中,shell既是用户交互的界面,也是控制系统的脚本语言。
1.1shell执行两种方式
1:依次输入一系列命令,交互式的执行
[root@linux ~]# for filename in `ls .`
> do
> if echo "$filename" | grep"xml"
> then
> echo "$filename"
> fi
> done
2:将这些命令按顺序保存在一个文件夹中,作为一个程序执行
#! /bin/sh
#for循环开始
for filename in `ls .`
do
#如果文件名包含xml
ifecho "$filename" | grep "xml"
then
#输出文件名
echo "$filename"
fi
done
上述的例子都是在当前目录中查找文件名包含“xml”的文件,在平幕上打印出来。第一个是一行一行的敲命令,但每次都要重新输入,一般都是用第二种方式,写入文件作为一个程序执行。
1.2脚本设置权限
可通过ls –l命令查看文件访问权限,一共6列,第一列为文件访问权限。
访问权限由9位组成
前三位:文件所有者对该文件的访问权限
中间三位:所有者同组的其他用户对该文件的访问权限
后三位:其他组用户对该文件的访问权限
每一组都用三个字母表示不同权限,r读权限,w写权限,x执行权限
数字模式下,4读权限,2写权限,1执行权限
指定执行权限授予的对象,u文件所有者,g所有者所属的组,o其他组用户,授予权限时,“+”表示授予权限,“-”表示收回权限
通过chmod[options] filename来赋予文件的权限
Chmod u+x ex1-2.sh 赋予ex1-2.sh文件所有者执行权限
也可以用数字表示
Chmod 744 ex1-2.sh
(7表示访问权限那列4+2+1,4表示所有者同组的其他用户读权限,4表示其他组用户读权限)
注:777是一个特殊权限,表示所有用户都可以享有读写执行权限,这样会带来完全隐患。
1.3脚本参数
$n:表示传递给脚本的第n个参数,如$1表示第一个参数
$#:命令行参数的个数
$0:当前脚本名称
$*:以“参数1参数2….”形式返回所有参数的值
$@:以“参数1”“参数2”形式返回所有参数的值
$_:保存之前执行的命令的最后一个参数
注意:包含空格或其他特殊字符,要适应单引号或双引号传递
参数中包含空格或其他字符,要用$@获取所有参数的值,不能用$*
参数间用空格,制表符隔开,默认空格
若参数多于9个,不能用$10来引用低十个参数,必须处理或保存第一个参数,然后用shift命令删除参数1,并将所有参数下移一位,此生$10变成$9
例:
#! /bin/bash
echo "$# parameters"
echo "$@"
执行:./ex1-3.sha “b c”
结果:2parameters
a b c
(参数1:a,参数2:”b c”(包含空格,用双引号括起来,返回时用$@))
1.4 第一个shell:helloworld
#! /bin/bash
#输出字符串
echo "Hello, Bash Shell!"
权限:chmod +xex1-5.sh
执行:./ex1-5.sh
结果:Hello ,BashShell!
基本组成:
1:#!/bin/bash
作用:告诉当前shell,应调用哪个shell执行当前shell。#!后面指定了解释器的绝对路径
2:注释,说明代码功能
Shell值支持单行注释,#,实现多行注释方法:
:<<BLOCK
注释内容
BlOCK
例如:
#! /bin/sh
:<<BLOCK
本脚本的作用是输出一行字符串
作者:chunxiao
BLOCK
echo "Hello world!"
3:可执行语句,实现功能
三种方式:
(1) 直接授予权限后执行,./ex1-7.sh
(2) 调用shell脚本解释器执行
/bin/bsahex1-7.sh
(3) source命令执行
Source命令是Shell内部命令,功能是读取指定的shell程序文件,一次执行其中所有语句。
Source ex1-7.sh
1.5 shell程序退出状态
在UNIX或Linux中,每个命令都返回一个退出码状态,为整数,范围0-255。
程序的退出状态非常重要,反应了脚本执行是否成功,用户可以根据脚本执行的状态决定下一步的操作。
一般,成功命令返回0,不成功命令返回非0值(被解释成一个错误码)。
Shell脚本或脚本函数中执行的最后命令会决定退出状态码,也可以使用exit语句将指定的退出状态码传递给shell。$?保存了最后一条命令的退出状态。
#!/bin/sh
echo "hello world"
#退出状态为0, 因为命令执行成功.
echo $? //上面echo语句正常,成功,所有返回0,此项为0
#无效命令.
abc
#非零的退出状态, 因为命令执行失败.
echo $? // abc为无效命令,不成功,返回非0
echo //正常echo语句,退出状态为0
#返回120退出状态给shell.
exit 120 //退出状态码120返回给shell,通过echo $0? 可得结果 120