Chinaunix首页 | 论坛 | 博客
  • 博客访问: 245714
  • 博文数量: 68
  • 博客积分: 2802
  • 博客等级: 少校
  • 技术积分: 614
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-11 15:38
文章存档

2013年(3)

2012年(15)

2011年(21)

2010年(29)

我的朋友

分类: LINUX

2013-01-24 18:11:42

有段时间没用shell编程了,开始有些生疏。最近回顾了下,就当笔记吧。如果能够给有需要的人一点帮助,也就心满意足了,呵呵……不多说了,直入主题。

   1.shell 脚本是区分小写的

   2.Unix特殊字符有:\ ( ; $ ? & * () [] `   + 使用其时要进行转义(\

   3.Shell的注释以#开头

   4.函数的定义

Function fuction_name{

Command to execute

}

或类似C语言:

fuction_name(){

    command to execute

}

个人喜欢用第一个方式,比较明了。

调用时直接用function_name.

   5.控制结构

1)If...then语句

If [ test_command ]

Then

Commands

fi

2)If...then...else语句

If [ test_command ]

Then

Commands

Else

commands

fi

3)If...then...elif...then...(else)语句

If [ test_command ]

Then

Commands

Elif [ test_command ]

Then

Commands

Else

Commands

Fi

4)for ... In语句

For loop_varible in argument_list

Do

Commands

done

5)while语句

While test_command_is_true

Do

Commands

Done

6)until 语句

Until test_command_is_true

Do

Commands

Done

7)case语句

Case $variable in

Match_1)

Commands_for_1

;;

Match_2)

Commands_for_2

;;

.

.

.

*) #option for other values

Commands_for_no_match

;;

esac

6.breakcontinueexitreturn语句

Break跳出整个循环体,然后执行循环体外接下来的代码;

Continue 结束本次循环,继续下次循环;

Exit 退出整个脚本,一般在其后加入一个整数(如exit 0),作为返回代码发送给系统;

Return 用于在函数中返回数据,或返回一个结果给调用函数

7.here文档

用于将输入重定向到某个交互式shell脚本或程序,而不需要用户介入。

Program_name << LABLE

Program_input_1

Program_input_2

.

.

Program_input_#

LABLE

注意,程序输入行中的LABLE标记之间是没有空白的,且输入的必须是程序所期望的准确数据,否则可能会失效。

8.符号命令

( )  在一个子shell中运行括号所括起来的命令

(( ))  在某个shell中对变量进行求值和赋值,并进行数学运算

$(( )) 对括起来的表达式进行求值

[ ]   test命令相同

[[ ]]  用于字符串比较

$( )   命令替换

` `    命令替换

9.命令行参数

命令行参数$0,$1,$2,...,$9是位置参数,$0指向的是命令本身。

命令shift用于位置参数向左移动,如shift命令命令$2成为$1Shift加入一个数字来移动多个位置,如shift 3使得$4成为$1shift是一种按照参数列出顺序来处理每个位置参数的良好方式。

10.特殊参数

$* 指定所有的命令行参数,与$@的意义一样。两者只有在加双引号时意义不同,如

$*将整个参数列表作为一个参数来获取,$@获取整个参数列表,并将它分隔成不同的参数。

$? 检查返回代码。一个成功执行完的命令返回代码为0,不成功是一个非0值。

11.双引号,单引号和 `(esc下面的按键)

单引号’’对内容进行全引用,也就是说,对变量工命令语句使用文字正文,不进行任何替换;而双引号则进行部分引用,则允许字符替换或命令替换。

`(esc下面的按键)用于执行某个命令或脚本并替换其输出结果,即命令替换,相同功能有$( )。此外,如果希望每次使用某个变量时重新读取它的值,也可使用它,如`$PWD`,则每次使用这个变量时都会重新读取它的新值。

12.文件权限和粘滞位(suid,sgid

文件权限有读,写,执行三种权限。将文件操作模式设为总是作为某个特定的用户(suid),或总是作为某个特定的组成员(sgid)来执行称为设置粘滞位。可以用命令chmod进行修改文件权限。 

13.在远程主机上运行命令

Ssh user@hostname command_to_execute

如:ssh  uptime

14.设置陷阱

当某个程序被迫中止时,会有一个退出信号,这个信号称为一个陷阱(trap)。这样我们可以在捕捉到退出信号时执行命令,如捕获到退出信号1,2,3,15时退出:

Trap `echo \nEXITTING on a TRAPPED SINGAL; exit` 1 2 3 15

注意不能捕获到kill -9.的退出信号。

15.查看用户信息

Who 提供每个登录用户的用户名、tty、登录时间及用户登录地(IP

W who的扩展,包括作业进程时间,总用户进程时间等,但没有用户登录地信息。

Last 显示自wtmp文件创建开始登录过的用户名单信息,包括登录时间,退出时间,tty等。

    16.ps命令

显示当前系统进程的信息。

17.与用户通信

Wall,rwall,write,talk

18.大小写文本

trtypeset命令。

VALUES = AFCDLD

Echo $VALUES | tr [A-Z] [a-z]  #将大写转换成小写;tr [a-z] [A-Z]则小写转换成大写

VALUES前使用

Typeset -l VALUES  #将大写转换成小写;typeset -u 则小写转换成大写。

19.定时运行脚本cron

Crontab -e进入用户cron表添加定时脚本,如

在1月15日星期天0:12执行脚本/usr/bin/test.sh

#分(0-59) 时(0-23)日(1-31) 月(1-12) 星期(0-6for Sunday-saturday) 

12 0 15 1 0 /usr/bin/test.sh

定时任务还可作用at命令。

20.输出控制

静默运行,即不输出任何内容到屏幕上: 2>&1 > /dev/null

输出到系统指定的控制台: > /dev/console

21.解析命令行参数getopts

Getopts optionstring VARIABLE

Optionstring 是所需的各种参数,用冒号隔开,如果不需要参数,则冒号可以省略。如果optionstring前有一个冒号,则任何未匹配到时会在VARIBLE中加载一个?

使用getopts的作用是解析出参数,然后作用此参数做不同的操作。如:

While getopts :s:m:h:d:p: TM

Do 

Case $TM in 

S)

Do something

;;

M)

Do something

;;

.

.

.

\?)

Exit 1

;;

Esac

22.逐行处理文件

While read LINE

Do

Echo $LINE

Done <$FILENAME

23.作用select命令创建菜单

Select menu in Yes No Quit

Do

Case $menu in

Yes)

Do something

;;

No)

Do something

;;

Quit)

Break

;;

*)

Do something

;;

Esac

done

 

阅读(1063) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~