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.break、continue、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.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
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
shell脚本学习
1,设置运行环境
在脚本的顶部写入:#!/bin/bash2,SHELL中变量与赋值str=hello
linux中变量不需定义,要用时直接赋值使用。如:str,注意等号两边不能有空格str=`ls -l /tmp/sh` 如果要把某个命令的执行结果赋给某个变量时,=号右边要用``括起来
echo "$str"
查看变量的值,此处结果为:hello3,从键盘输入字符或数值赋给指定的变量read name 如:从键盘输入lishi,则name的值为:lishi4,"",'',``双引号,单引号,倒引号之间区别
echo "my name is $name"
显示字符串,但含有转义字符引用其变量的值。例中结果:my name is tom
echo 'my name is $name'
把单引号中的内容原样显示出来,结果:my name is $name
echo `ls -l`
把倒引号中字符当作命令来执行,并把执行结果显示出来。5,加,减,乖,除,求模运算。注意要用倒引号括起来
expr `5 + 4`
expr `5 - 4`
expr `5 \* 4`
expr `5 / 4`
expr `5 % 4`
如果是在脚本里面进行运算时,倒引号要包括=号右边全部内容。如:sum=0sum=`expr $sum + 1`6,对文本操作的命令
less 能上下翻
more 能一屏一屏的翻
head 看文本的头10行 参数-n 5 表示只显示头5行
tail 看文本的尾10行,加 -f参数,能实时看日志文件的变化。如看tomcat日志文件变化。tail -f /usr/tomcat/logs/canitsl.out
参数-n 5 表示只显示头5行7,$?表示上一个命令是否正确执行,0表示正常,1表示错误
ls /tmp/hello,如果/tmp/下没有hello这个文件或目录。则$?为1,反之为08,./test lishi wangwu
$0程序名,$1第一个参数的名称,例中$0为test
$*参数组成的字符串,例中$*为lishiwangwu
$#传递给程序参数的总数目,例中$#为29,linux中变量分为全局环境变量和用户配置变量
全局环境变量针对系统中所有用户而设置的工作环境目录,在/etc/profile中
用户配置变量针对某一用户的。在用户登录的目录下,.bash_profile中10,重定向重定向就是改变原来输入输出的方向,默认都是屏幕输出设备,键盘是输入设备。“>”是输出重定向符。“<”是输入重定向符。“>”只存放正确的信息,“2>”存放错误的信息,每次存入前都会把之前文件内容清空再放入如:ls /usr > /tmp/aaa 把/usr目录下的所有文件和文件夹名称信息放到期/tmp/aaa文件中。
如:ls /test 2> /tmp/aaa 如果没有/test文件夹,这时就会发生错误,那么2>就会把错误信息存入aaa文件中。
“>”能创建新文件,如:>hello.java
“>”能清空一个文件 如hello.java文件中有内容,我再>hello.java这时,hello.java内容清空“>>”双大于号在一起就变成了追加功能,在之前的文件内容后面追加内容。如:cat /tmp/sh >> /tmp/aaa 把/tmp/sh目录中的所有文件和目录信息追加到aaa文件中。aaa文件之前的内容不会被清除。cat > hello.java时,能在屏幕上输入很多的内容,按ctrl+D时就会退出。再cat hello.java时
刚才输入的内容,全在hello.java文件中11,输入重定向如:cat > a.txt <<EEE,从屏幕上输入内容到a.txt中,直到输入EEE时才结束!!!!像这种结合方式,经常被用在自动执行记录某些日志,或者写入信息时用到。
最新评论