shell脚本学习总结-2012

发布时间:2020-03-04编辑:脚本学堂
shell脚本学习总结,东西很多,供初学者参考。

shell/ target=_blank class=infotextkey>shell脚本学习总结,东西很多,供初学者参考。

1.shell 脚本是区分小写的
2.Unix特殊字符有: ( ; $ ? & * () [] ` ‘ “ + 使用其时要进行转义()
3.Shell的注释以#开头
4.函数的定义
Function fuction_name(){
Command to execute
}

调用时直接用function_name.

5.控制结构
1)If...then语句
If [ test_command ]
Then
Commands
if

2)If...then...else语句
If [ test_command ]
Then
Commands
Else
commands
if

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.breakcontinue、exit和return语句

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成为$1。Shift加入一个数字来移动多个位置,如shift 3使得$4成为$1。shift是一种按照参数列出顺序来处理每个位置参数的良好方式。

10.特殊参数

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

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

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

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

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

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

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

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

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

Ssh user@hostname command_to_execute

如:ssh jack@192.168.1.3 “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.linuxjishu/14079.html target=_blank class=infotextkey>ps命令

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

17.与用户通信

Wall,rwall,write,talk

18.大小写文本

用tr或typeset命令。

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