Shell

上一篇 / 下一篇  2011-05-09 20:17:25 / 个人分类:Shell

     在计算机科学中,Shell俗称壳,是指“提供使用者使用界面”的软件(命令解析器),它类似于DOS下的command.com。它接收用户命令,然后调用相应的应用程序,同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包括循环和分支它是命令语言、命令解释程序及程序设计语言的统称。

一、编写shell脚本的步骤
1:选择编辑器
  1、选择Linux系统自带的vi编辑器
  2、NotePad、UE、EditPlus等
2:编写脚本
  例1 example_1.sh:
  #!/bin/bash
  echo "Hello world"
3:赋予执行权限
  chmod a+x example_1.sh
4:执行脚本
  方式一: . example_1.sh
  方式二: sh example_1.sh
  方式三: bash example_1.sh
5:执行结果
  Hello world

二、shell中的通配符
    通配符用于模式匹配,如文件名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号[ ]中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成一个所谓的“模式串”,在执行过程中进行模式匹配。

    * 代表任何多个字符串,例如:“a*”匹配以a打头的任意字符串。
但应注意,文件名前的圆点(.)和路经名中的斜线(/)必须显式匹配。例如“*”不能匹配.file,而“.*”才可以匹配.file。
    ? 代表任何单个字符。
   [] 代表指定的一个字符范围,只要文件名中[ ]位置处的字符在[ ]中指定的范围之内,那么这个文件名就与这个模式串匹配。方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符(-)组成。例如,f [a- d] 与f [abcd]的作用相同。
    备注:连字符“-”仅在方括号内有效,表示字符范围,如在方括号外面就成为普通字符了,而*和?只在方括号外面是通配符,若出现在方括号之内,它们也失去通配符的能力,成为普通字符了.例如:模式“- A[*?]123”只能匹配_A*123或_A?123

三、shell中的引号
    单引号:由单引号括起来的所有字符,都作为普通字符,如echo '$PATH' =>$PATH
    双引号:由双引号括起来的除$ ` \保留其特殊含义外,其余字符都作为普通字符 echo "`pwd`" =>输出系统日期
    反引号:反引号用于设置系统命令的输出到变量。shell将反引号中的内容作为一个系统命令,并执行其内容。使用这种方法可以替换输出为一个变量。反引号可以与引号结合使用,如 echo `date` =>输出系统日期
    反斜线:如果下一个字符有特殊含义,反斜线防止 shell误解其含义,即屏蔽其特殊含义。下述字符包含有特殊意义:& * + ^ $ ` " | ?。
如 echo * => 以串行顺序打印当前整个目录列表
echo \* => 输出 *

四、shell中的条件测试
写脚本时,有时要判断字符串是否相等,可能还要检查文件状态或是数字测试,基于这些测试才能做进一步动作。
test命令用于测试字符串,文件状态和数字,也很适合if、then、else条件结构。

对文件、字符串和数字使用test命令
对数字和字符串使用expr命令
expr命令测试和执行数值输出,使用最后退出状态命令$?可测知test和expr,二者均以0表示正确,1表示返回错误。
★ 测试文件状态
test condition 或 [ condition ]
-d 目录
-s 文件长度大于0、非空
-f 正规文件
-l 符号连接
-u 文件有s u i d位设置
-r 可读
-w 可写
-x 可执行
如 test -d /opt 或 [ -d /opt ] =>判断/opt目录是否存在,如echo $? 则返回0,否则返回1
★ 字符串测试
test "string" string_operator "string" 或 [ "string" string_operator "string" ]
string_operator 可为:
= : 两个字符串相等
!= : 两个字符串不相等
-z : 空串
-n : 非空串

如: [ -n "abc" -a "abc" != "Abc"] =>返回真
★ 数值测试
test number number_operator number 或 [ number number_operator number ]
number_operator 可为:
-eq 数值相等
-ne 数值不相等
-gt 第一个数大于第二个数
-lt 第一个数小于第二个数
-le 第一个数小于等于第二个数
-ge 第一个数大于等于第二个数

如: [ "12" -le "15" ] ; echo $? => 返回真

★ 测试时使用的逻辑操作符
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。

如: [ -d /opt -a -w /opt/a.sh ] 当/opt目录存在,且/opt/a.sh文件可写时,返回真,否则返回假
★ expr的用法
expr常用于整数值,字符串,格式如下: expr argument operator argument
同时expr也是一个手动命令计数器

如: expr 12+3 => 12+3
expr 12 + 3 => 15
expr 12 \* 3 => 36
expr "a" = "a" => 判断字符串是否相等 ,结果为真,返回1<与test不同>
B=`expr 1 + 1`
echo $B => 2
五、shell中的控制结构
★ if then else 语句
例:
if [ "90" -lt "100" ];then
echo "yes, 90 is less than 100"
else
echo "no, 90 is more than 100 "
fi
★ case 语句
例:
echo -n "enter a number from 1 to 3:"
read NUM
case $NUM in
1) echo "you select 1"
;;
2) echo "you select 2"
;;
3) echo "you select 3"
;;
*) echo "error! $0:This is not between 1 to 3" >$2
exit 1
;;
esac
★ for 循环
例1:
#!/bin/bash
for i in 1 2 3
do
echo $i
done
==> 运行,输出
1
2
3
例2:
#!/bin/bash
for((i=0 ; i<2 ; i++))
do
echo $i
done
==> 运行,输出
0
1

备注:
((表达式)) 双括号表示计算表达式的值,
$((表达式)) 取表达式的值
★ while 循环
表示条件为真时执行,直达条件为假时停止执行
例:
#!/bin/bash
A=0
while [ $A -lt 2 ]
do
A=`expr $A + 1`
echo $A
done
==> 运行,输出
1
2

★ until 循环
表示条件为假时执行,直到条件为真时停止执行
例:
#!/bin/bash
A=0
until [ $A -gt 2 ]
do
A=`expr $A + 1`
echo $A
done
==> 运行,输出
1
2
3
★ break . continue
break : 可用于case语句,在循环中使用,表示直接退出循环
continue: 只能用于循环语句中,表示退出当次循环
例:
#!/bin/bash
for((i=0 ; i<5 ; i++))
do
if [ $i -eq 2 ] ; then
continue
fi
if [ $i -eq 4 ] ; then
break
fi
echo $i
done
==> 运行,输出
0
1
3


六、shell中的函数
步骤:
1.将包含函数的文件载入到shell中
. out.main 或./ out.main
# file out.main content
output_info()
{
echo "output information"
}
2.检查载入是否成功 set | grep output_info
3.使用文件中已经定义的函数
output_info 只需给出函数名即可,不需A(),否则报错
输出=>output information
4.删除函数 unset output_info
如需重新使用A,需重复步骤1..4

七、shell中的权限讲解
通过ls -l 可查看文件或目录的属性,如
-rwxr-xr-x a.sh <- 代表a.sh是一个文件>
drwxr-xr-x b

说明
★ 第一字符代表的含义如下:
d 目录。
l 符号链接(指向另一个文件)。
s 套接字文件。
b 块设备文件。
c 字符设备文件。
p 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件。

★ 文件的访问方式
读(-r): 可以显示该文件的内容
写(-w): 可以编辑或删除它
执行(-x): 如果该文件是一个shell脚本或程序,则可被执行
★ 文件的权限:
文件属主(-u): 创建该文件的用户
同组用户(-g): 拥有该文件的用户组中的任何用户
其他用户(-o): 即不属于拥有该文件的用户组的某一个用户
所有用户(-a): 一切的用户
★ 除第一个字符外,每3个数字代表一个权限位
-rwxr-xr-x,划分权限位之后为:rwx r-x r-x
★ 有两种方式可修改文件的权限
方式一:
chmod [who] operator [permission] filename
w h o的含义是:
u 文件属主权限。
g 同组用户权限。
o 其他用户权限。
a 所有用户(文件属主、同组用户及其他用户)。
o p e r a t o r的含义:
+ 增加权限。
- 取消权限。
= 设定权限。
p e r m i s s i o n的含义:
r 读权限。
w 写权限。
x 执行权限。
如: chmod -R u=x name_dir (给目录name_dir及其子目录/文件的文件属主赋予执行的权限)

方式二
chmod [mode] file
mode 每一个权限位用一个八进制数表示,如551
读(-r) : 4
写(-w) : 2
执行(-x): 1

如: chmod 751 file_name =>file_name文件的属主具有可读,可写,可执行的权限;
file_name文件属主所在的组具有可读,可执行的权限,没有可写的权限
file_name文件属主所在组的其他用户具有可执行的权限,没有读,写的权限

★ umask
umask:当最初登录到系统中时,umask命令确定创建目录和文件的缺省模式<如读,写等>
输入umask命令,可查看当前用户,umask的值 如(0022)

当umask=022,那当怎样确定当前用户创建目录和文件的缺省模式,步骤如下:
步骤一:所有用户都具有最高权限777
步骤二:777-022的值,即为当前用户创建目录时的默认权限755
步骤三:666-022的值,即为当前用户创建文件时的默认权限644
八、硬链接和软链接
Linux系统下的符号链接有两种类型的链接,硬链接、软链接
软链接:类似与windows系统的快捷方式,其实windows的快捷方式就是基于linux的软链接机制实现的
硬链接:也是源文件的一种快捷方式,它只能指向文件而不能指向目录。

共同点:
如果用户对链接进行打开,修改等其实就是对目标文件的操作。
但是如果你删除了链接,源文件仍然是存在的。
如果用户对源文件进行修改,那么打开链接后,内容也发生改变了,因为源文件变了。软硬链接不占空间的(占的很小很小)
区别:
(1)软链接可以指向文件和目录;软链接只能指向文件;
(2)软链接可以跨文件系统;硬链接不可;
(3)在源文件消失后,软链接会失效,所占空间大小不变;硬链接不会失效,
它所占的空间为变成源文件的大小。基于这种特性,硬链接常用来备份。
(4)软链接指向的源文件的路径;而硬链接指向的源文件的内存地址。这也是为什么源文件被删除了。
硬链接仍能使用的原因。
命令:
软链接: ln [-s] 源路径 链接名字
硬链接: ln 源路径 链接名字

九、特定变量
$?: 记录上次命令执行的结果,0:代表成功,非0:代表失败
$1 ~ $9 : 代表传递给脚本的参数名
$#: 代表传递给脚本的参数个数


 

TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-05-26  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 578
  • 日志数: 1
  • 建立时间: 2011-01-12
  • 更新时间: 2011-05-09

RSS订阅

Open Toolbar