当前位置:文档之家› shell脚本学习与总结

shell脚本学习与总结

shell脚本学习与总结
shell脚本学习与总结

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_1Match_2)

Commands_for_2.

.

.

*) #option for other values

Commands_for_no_matchesac

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

Do

Case $TM in

S)

Do somethingM)

Do something.

.

.

?)

Exit 1Esac

22.逐行处理文件

While read LINE

Do

Echo “$LINE”

Done <$FILENAME

23.作用select命令创建菜单

Select menu in Yes No Quit

Do

Case $menu in

Yes)

Do somethingNo)

Do somethingQuit)

Break*)

Do somethingEsac

doneshell脚本学习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时才结束!!!!像这种结合方式,经常被用在自动执行记录某些日志,或者写入信息时用到。

SYSPROFILE=/etc/profilecat >> $SYSPROFILE

<<EOF

export JAVA_HOME=/usr/java/jsdk

export JAVA_OPTS="-Xms64m -Xmx768m"

export

PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin::$PATH export

CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar: $JAVA_HOME/lib/tools.jar

EOF12,管道管道:把前一个命令的输出作为下一个命令的输入。顾名思义就是连接前后两个管道的作用。

把上一个管道的尾与下一个管道的头相连接。ls -l /tmp/test | wc -l 统计/tmp/test目录中共有多少个文件和目录。把/tmp/test目录中文件和目录按列显示。并把显示出来的结果作为wc -l命令的信息源。13,条件判断语句字符串比较:=,!=,-n:判断字符串长度是否大于0,大于0则为真,-z:判

断字符串长度是否等于0,等于0则为真

数字比较:-eq相等,-ge大于等于,-le小于等于,-ne不等于,-gt大于,-lt小于

逻辑判断:!非,&&与,||或

文件判断:-d目录判断,-f文件判断,-r可读,-w可写,-x可执行test 条件1 比较符条件2 如:test 1 -eq 1

[ 条件1 比较符条件2 ] 如:[1 -eq 1 ],[ -n "" ]

[ `who | wc -l` -le 10 ]&& echo "YES" 判断当前系统的登录用户数是否小于等于10,是,则输出YES 16,循环语句:

while 条件为真时,执行

do

..

done例:j=1

while((j<=10)) 或者while [ j -le 10 ]

do

echo "j=$j"

j=`expr $j + 1

done if语句:

if

then

else 此处也可elif与fi再嵌套

fi 例:x=4;y=7if [ $x -eq $y ]

then

echo "相等"

else

echo "不相等"

fi case 变量in

数值1) 语句;;

数值2) 语句;;

*) 语句;; #如果数值不在范围之中,就执行这一行例:USER=whoamicase $USER in

lishi)

echo "you are LISHI";

echo "Welcome ";;

root)

echo "you are ROOT"

echo "hi root ";;

admin)

echo "you are admin";

echo "admin,hello ";;*)echo "当前用户不是

lishi,root,admin";;

esac for 循环例:用FOR循环显示/tmp/sh目录中的每个文件信息。变量i的取值是/tmp/sh目录中的每个文件如for i in

"a" "b" "c",此时变量i每次循环的取值为a,b,cpath=/tmp/sh/ for i in `ls $path`

do

ls -l $i

done例:#用for与if相结合的手法,显示出从1到键盘输入数之间的偶数

#注意if语句的双括号read x

for((i=1;i<=$x;i++))

do

if [ $i % 2 == 0 ]

then

echo "$i"

fi

done14,函数# 定义一个累加的函数sum, 再从键盘上输入两个数,再调用sum函数

# 注意,函数一定要放在调用该函数的前面sum()

{

a=$x

b=$y

total=`expr $a + $b`

echo "total = $total"

}echo "please enter two number:"

read x

read y

sum $x,$y

shell start:

shell有bsh,bash,cash等

1,在linux中管理员用户登录进去时,提示符为:#,一般用户登录进去时的提示符为:$

登录进去后,退出或要切换用户时,用:exit命令,正常退出。2,查看当前系统中的shell版本,在/etc/shell目录中查看。3,在系统中查看不同用户默认的shell版本,/etc/passwd 查看当前用户的shell,echo shell

4,直接用命令改变某个用户的shell环境:chsh 系统用户名,根据提示输入新shell路经,如:/bin/bash

5,查看当前用户的环境变量和ID号,set | grep user,set | grep uid 或,查看/etc/passwd文件

6,查看某个命令在哪个位置which 命令如:which ifconfig 当某些一般用户中有些命令提示无法找到

或执行时,一般是环境变量中没有把该命令的路经加进来。用export命令设置环境变量

7,查看以前使用过的命令history history -c清除之前使用过的命令

8,;在shell中用来区分一个命令的结束。一行中可以多个命

9,调试shell脚本用. 脚本文件名或bash 脚本文件名10,文件权限分三类:

a,文件属主:创建该文件的用户

b,同组用户:拥有该文件的用户组中的任何用户

c,其它用户:即不属于拥有该文件的用户组的某一用户如:-rwxr-xr-x 1 root root 217 08-10 19:51 test1.sh

第一个字符表示文件的类型,是文件夹,还是普通文件例中-表示普通文件

后面的9个字符分三段,第一段是文件属主的权限

第二段是同组用户的权限,第三段是其它用户的权限

赋权限:g是代表同组用户,o是代表其它用户

chmod go+wx ./test.sh 给同组用户和其它用户赋写和执行的权限

chmod u+wr ./test.sh 给自己赋读和写权限

chmod o+wrx ./test.sh 给其它用户赋读,写和执行的权限去权限与赋权限同理,只是把“+”换成“-”就可以了

chmod go-rw ./b.c 把同组用户和其它用户读和写的权限去除

11,一般权限也可以用数字表示:4:读,2:写,1:执行, 如果用数字给某一个文件赋权限,要写3段数字,如:764,则表示

用户自己是读写执行,同组用户是读写,其它用户是读的权限。

12,给文件和文件夹赋权限时,两者互不干扰,除非在给文件夹赋权限时带-R参数

那么,该文件夹下的所有内容就赋予了和文件夹一样的权限了,小心使用-R

13,查看文件夹权限时,用:ll -d /tmp/sh -d是查看文件夹的,不然只会

列出该文件夹的内容了。

14,改变文件的所属用户,chown oracle /tmp/sh/api.sh 改变文件的所属组,chown :oracle /tmp/sh/api.sh

同时,改变文件的所属用户和组,chown oracle:dba

/tmp/sh/api.sh 那么api.sh的所属用户和组信息为:

-rwxrwxr-x 1 oracle dba 264 07-28 15:57 /tmp/sh/api.sh 15,id 命令,查看当前是哪个用户,以及哪个组的相当信息

16,groups 查看系统当前有多少个组,groups 用户名如:groups oracle,查看用户所属组

17,getent group 组名如:getent group dba 查看dba 组中有哪些用户

18,创建一个用户并把它加入到指定组中useradd wangcai -G root

19,当一个脚本需要以拥有者或组的用户执行时,需要用到suid,guid

文件设置了suid或guid时,如果该文件没有执行权限,那么设置suid或guid时就没有意思,会用大写"S"

表示。4代表suid,2代表guid

如:start-orcl.sh 例子,首先用chown改变文件所属用户,再用chmod改变文件suid和guid的权限

-rwxr-xr-x 1 root root 632 08-15 17:31 start-orcl.sh chown oracle start-orcl.sh

-rwxr-xr-x 1 oracle root 632 08-15 17:31 start-orcl.sh chmod 6751 start-orcl.sh

-rwsr-s--x 1 oracle root 632 08-15 17:31 start-orcl.sh 20,用指定的用户身份执行一个脚本su - oracle -c

"/tmp/sh/start-orcl.sh"

以oracle的身份执行start-orcl.sh这个脚本

21,创建快捷方式ln -s /tmp/sh 1 创建快捷方式1指向

/tmp/sh,访问1相当于访问/tmp/sh一样。

22,定时任务:

用service crond status 查看cron服务状态,如果没有启动则service crond start启动它。

基本用法:

crontab -l

列出当前的crontab任务

crontab -d

删除当前的crontab任务

crontab -e (solaris5.8上面是crontab -r)

编辑一个crontab任务,ctrl_D结束

crontab filename

crontab的格式为:分时日月星期命令(中间用空格隔开)。

crontab文件的条目是从左边读起的,第一列是分,以此类推,最后一列是需要执行的命令。

每一列称为crontab的一个域,在这些域中,可以用-

来连接一个时间范围,例如星期一到星期五,可以用1-5来表示。

单个时间点可以用,号分隔,比如星期一和星期四,那么可以表示为1,4。如果某个表示时间的域没有特别限制,可以用*号表示。每一个时间条目包含5个域,用空格隔开。

比如我希望每天晚上21:30运行bin目录下的cleanup.sh文件,那么该命令就应该为:

30 21 * * * /app/bin/cleanup.sh (注意:由于不需要限定日期、月份、星期,所以日期、月份和星期域用*号表示)比如我希望每月得1、10、20的00:00运行backup.sh 文件,那么命令应该为:

Shell 经典实例

Thizlinux 系统教程 Shell 经典实例 ----------------Milo 经典小shell 1 列目录树的shell 脚本如下: #!/bin/sh # dtree: Usage: dtree [any directory] dir=${1:-.} (cd $dir; pwd) find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g" 2 while中使用read (file是一个文件) cat file | while read line do echo $line echo " :: Please input any key(s):c" str4read="" while true do chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null` str4read=$str4read$chr4read if [ "$chr4read" = "" ] ;then break; fi

done echo " :: |$str4read|" done 3 将多个空格替换为字符 sed 's/[ ][ ]*/ /g' 如果空格与tab共存时用 sed -e 's/[[:space:]][[:space:]]*/ /g' filename 4用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi

经典shell 脚本实例

Linux shell 脚本实例 1. 写一个脚本,利用循环计算10的阶乘#!/bin/sh factorial=1 for a in `seq 1 10` do factorial=`expr $factorial \* $a` done echo "10! = $factorial" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。#!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done ////////////////////////////////////////// #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和 4.一个函数,利用shift计算所有参数乘积,假设参数均为整数 #! /bin/sh result=1 while [ $# -gt 0 ] do result=`expr $result * $1` shift done echo $result 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。#!/bin/shcase ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type"esac6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

linux+shell脚本语言基础知识

linux shell脚本语言基础知识 一.shell简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的界面,更确切的说,shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行,又可以利用Shell脚本编程,完成更加复杂的操作。 shell是一个命令解释器,它从输入设备读取命令,再将其转为计算机可以了解的指令,然后执行它。在linux中,shell又不仅是简单的命令解释器,而且是一个全功能的编程环境。 Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell (/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种就足够了。通常用Bash,也就是Bourne Again Shell进行编程。 二.shell使用 1.建立和运行shell程序 shell脚本程序:按照一定的语法结构把若干linux命令组织在一起,是这些命令按照我们的要求完成一定的功能。它可以进行类似程序的编写,并且不需要编译就能执行。(只需修改其权限) 像编写高级语言的程序一样,编写shell程序需要一个文本编辑器,如VI和VIM,通常使用VIM文本编辑器,支持更便利的插入模式。 首先使用VIM编辑器编辑一个hello.sh文件: #!/bin/bash #hello world example

linux脚本实例

1.写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。 #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 2.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。 #!/bin/sh case ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type" esac 3.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。 #!/bin/sh RPM=/bin/rpm option="-q" while true do echo "what to query?" select var in "All" "file" "package name" do case $var in All) option=$option"a" break ;; file) echo -n "please input file name: "

Shell脚本编程详解-吐血共享

第12章 Shell 脚本编程 ● Shell 命令行的运行 ● 编写、修改权限和执行Shell 程序的步骤 ● 在Shell 程序中使用参数和变量 ● 表达式比较、循环结构语句和条件结构语句 ● 在Shell 程序中使用函数和调用其他Shell 程序 12-1 Shell 命令行书写规则 ◆ Shell 命令行的书写规则 对Shell 命令行基本功能的理解有助于编写更好的Shell 程序,在执行Shell 命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: [root@localhost root]# ls a* -l;free;df 长Shell 命令行可以使用反斜线字符(\)在命令行上扩充,例如: [root@localhost root]# echo “ this is \ >long command ” This is long command 注意: “>”符号是自动产生的,而不是输入的。 12-2 编写/修改权限及执行Shell 程序的步骤 ◆ 编写Shell 程序 ◆ 执行Shell 程序 Shell 程序有很多类似C 语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。Shell 程序是指放在一个文件中的一系列Linux 命令和实用程序。在执行的时候,通过Linux 操作系统一个接一个地解释和执行每条命令。首先,来编写第一个Shell 程序,从中学习Shell 程序的编写、修改权限、执行过程。

12-2-1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。 [root@localhost bin]#vi date #! /bin/sh echo “Mr.$USER,Today is:” echo &date “+%B%d%A” echo “Wish you a lucky day !” 注意: #! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date 命令前加符号“&”,其中%B%d%A为输入格式控制符。 12-2-2 建立可执行程序 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。[root@localhost bin]#chmod +x date 12-2-3 执行Shell程序 执行Shell程序有下面三种方法: 方法一: [root@localhost bin]#./ date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法二: 另一种执行date的方法就是把它作为一个参数传递给Shell命令: [root@localhost bin]# Bash date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。 具体操作如下: [root@localhost root]#export PATH=/bin:$PATH [root@localhost bin]# date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day !

Shell脚本编写基础

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell 是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统的关键。可以说,shell使用的熟练程度反映了用户对Linux使用的熟练程度。 一、什么是shell 当一个用户登录Linux系统之后,系统初始化程序init就为每一个用户运行一个称为shel l(外壳)的程序。那么,shell是什么呢?确切一点说,shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell 来启动、挂起、停止甚至是编写一些程序。 当用户使用Linux时是通过命令来完成所需工作的。一个命令就是用户和shell之间对话的一个基本单位,它是由多个字符组成并以换行结束的字符串。shell解释用户输入的命令,就象DOS里的https://www.doczj.com/doc/ea17413708.html,所做的一样,所不同的是,在DOS中,https://www.doczj.com/doc/ea17413708.html,只有一个,而在Linux下比较流行的shell有好几个,每个shell都各有千秋。一般的Linux系统都将bash作为默认的shell。 二、几种流行的shell 目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令来查看你自己的shell类型: #echo $SHELL $SHELL是一个环境变量,它记录用户所使用的shell类型。你可以用命令: #shell-name 来转换到别的shell,这里shell-name是你想要尝试使用的shell的名称,如ash等。这个命令为用户又启动了一个shell,这个shell在最初登录的那个shell之后,称为下级的shell或子shell。使用命令: $exit 可以退出这个子shell。 使用不同的shell的原因在于它们各自都有自己的特点,下面作一个简单的介绍: 1.ash ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小shell,它只包含24个内部命令,因而使用起来很不方便。 2.bash bash是Linux系统默认使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的shell是因为它有诸如以下的特色: (1)可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。 (2)自动通过查找匹配的方式给出以某字符串开头的命令。 (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。 3.ksh ksh是Korn shell的缩写,由Eric Gisin编写,共有42条内部命令。该shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。 4.csh

LinuxShell脚本教程(一):Shell入门

LinuxShell脚本教程(一):Shell入门 LinuxShell脚本教程(一):Shell入门 在这里我们介绍的是Bashshell(BourneAgainShell),它是目前大多数GUN/Linux系统默认的shell环境。书中所有的实验都是在Ubuntu14.04LTS环境下完成的。 在ubuntu14.04LTS系统中,已经默认安装了一个Terminal,我们可以通过多种方法打开终端。这里介绍两种: 方法一:通过系统自带的检索系统,我们可以轻松找到终端(Terminal),单击即可打开。检索系统可以通过快速启动栏右上角的按钮启动。 方法二:为了之后可以方便的打开终端,建议将终端固定在快速启动栏。操作方法为:通过方法一打开终端后,快速启动栏会出现一个终端的图表,在图表上单击鼠标右键,选择“固定在启动栏”即可将终端固定在快速启动栏。 默认情况下,终端提示符为:username@hostname或者 root@hostname#。代表普通用户,#代表root用户。 例如:我在打开终端后,提示符为:wxb@ubuntu:~$。 root是linux系统中权限最高的用户,能力大风险也大,因此不介意使用root用户作为登陆系统的.默认用户。 通常情况下,对于个人版linux操作系统,系统上会存在两个用户,即用户自己以及root用户。对于使用者来说,时有需要切换用户,以执行一些普通用户不能执行的操作,此处提供两种方法切换用户。 方法一:临时切换。顾名思义,这种切换方法仅仅是临时的,当指令执行完成后,就会切换到原来的用户。切换指令为:sudocommand,sudo是superuserdo的简写。

很实用的Shell脚本(实践版)

很实用的Shell脚本(实践版)

/erpHome/shell/old/$1/$2.zip.old find . -mtime +7 | xargs nice -n 20 zip -qm /erpHome/shell/old/$1/$2_$DayOfWeek.zip # find . -mtime +7 Fi archiveOld2.sh . /erpHome/shell/setP.sh export DayOfWeek=`date +"%u"`

if test "$#" -lt 1 || test -z "$1" then echo At least one argument needed. exit fi if test ! -e "$ShellHome/old/$1" then cd $ShellHome/old/ mkdir -p $1 fi if test ! -e "$ERPHome/$1" then echo "$ERPHome/$1" "does not exist" exit fi cd $ERPHome/$1 mv $ShellHome/old/$1_$DayOfWeek.zip $ShellHome/old/$1.zip.old find . -mtime +7 -type f | xargs nice -n 20 zip -qm $ShellHome/old/$1_$DayOfWeek.zip #find . -mtime +7 -type f

archiveOldAll.sh /erpHome/shell/archiveOld.sh work/dr/engine jrprint /erpHome/shell/archiveOld.sh work/de tmp /erpHome/shell/archiveOld2.sh public

个人整理shell脚本编程笔记

shell脚本编程学习笔记(一) 一、脚本格式 vim shell.sh #!/bin/bash//声明脚本解释器,这个‘#’号不是注释,其余是注释 #Program://程序内容说明 #History://时间和作者 二、shell变量的种类 用户自定义变量:由用户自己定义、修改和使用 与定义变量:Bash与定义的特殊变量,不能直接修改 位置变量:通过命令行给程序传递执行的参数 1、定义变量: 变量名要以英文字母或下划线开头,区分大小写。 格式:变量名=值 输出变量:echo $变量名 2、键盘输入为变量内容: 格式:read [-p "信息"] 变量名 如:read -p "pewase input your name:" name 3、不同引号对变量的作用 双引号"":可解析变量,$符号为变量前缀。 单引号'':不解析变量,$为普通字符。 反引号``:将命令执行的结果输出给变量。 三、shell条件测试 1、test命令: 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数字。 格式:test 条件表达式[ 条件表达式] (注意:[]与表达式之间存在空格) 2、常见的测试类型: 测试文件状态 格式:[ 操作符文件或目录] 如:if [ -d /etc ] then echo "exists" else echo "not exists" fi 常见的测试操作符: -d:测试是否为目录 -e:测试目录或文件是否存在 -f:测试是否为文件 -r:测试当前用户是否有读权限 -w:测试当前用户是否有写权限 -x:测试当前用户是否有执行权限

Shell脚本-Demo-29例

【例子:001】判断输入为数字,字符或其他 1.#!/bin/bash 2.read -p "Enter a number or string here:" input 3.case $input in 4. [0-9]) echo -e "Good job, Your input is a numberic! \n" ;; 5.[a-zA-Z]) echo -e "Good job, Your input is a character! \n" ;; 6. *) echo -e "Your input is wrong, input again! \n" ;; 7.esac 【例子:002】求平均数 1.#!/bin/bash 2.# Calculate the average of a series of numbers. 3.SCORE="0" 4.AVERAGE="0" 5.SUM="0" 6.NUM="0" 7.while true; do 8. echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE; 9. if (("$SCORE" < "0")) || (("$SCORE" > "100")); then 10. echo "Be serious. Common, try again: " 11. elif [ "$SCORE" == "q" ]; then 12. echo "Average rating: $AVERAGE%." 13. break 14. else 15. SUM=$[$SUM + $SCORE] 16. NUM=$[$NUM + 1] 17. AVERAGE=$[$SUM / $NUM] 18. fi 19.done 20.echo "Exiting." 【例子:003】自减输出 1.[scriptname: doit.sh] 2.while (( $# > 0 )) 3.do 4. echo $* 5. shift 6.done 7./> ./doit.sh a b c d e 8. a b c d e 9. b c d e 10.c d e

linux Shell(脚本)编程入门 实例讲解详解

linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在bash 的大姐,bourne shell中运行)。 如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi等来编写我们的shell程序。程序必须以下面的行开始(必须方在文件的第一行): 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行。 要使脚本可执行: 然后,您可以通过输入: ./filename 来执行您的脚本。 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:

LinuxShell脚本编程实例

#! /bin/sh echo "Current command is $0" echo "The first parameter is $1" echo "The second parameter is $2" echo "The third parameter is $3" echo "Total of parameters if $#" echo "Current PID is $$" #!/bin/bash times=0 until [ "$times" = 3 ]; do echo "I love linux." sleep 2 times=`expr $times + 1` done #!/bin/bash # menu shell script. samli 2004.4.19 until echo "List Directory..........1" echo "Change Directory........2" echo "Edit File...............3" echo "Remove File.............4" echo "Exit Menu...............5" read choice test $choice = 5 do case $choice in 1) ls;; 2) echo "enter target directory:" read dir cd $dir ;; 3) echo "enter file name:" read file vi $file ;; 4) echo "enter file name:" read file rm $file ;; 5) echo "Goodbye"

shell脚本之前的基础知识

第十二章学习shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么你就不算一个合格的管理员。目前很多单位在招聘linux系统管理员时,shell脚本的编写是必考的项目。有的单位甚至用shell脚本的编写能力来衡量这个linux系统管理员的经验是否丰富。笔者讲这些的目的只有一个,那就是让你认真对待shell脚本,从一开始就要把基础知识掌握牢固,然后要不断的练习,只要你shell脚本写的好,相信你的linux求职路就会轻松的多。笔者在这一章中并不会多么详细的介绍shell脚本,而只是带你进入shell脚本的世界,如果你很感兴趣那么请到网上下载相关的资料或者到书店购买相关书籍吧。 在学习shell 脚本之前,需要你了解很多关于shell的知识,这些知识是编写shell脚本的基础,所以希望你能够熟练的掌握。 【什么是shell】 简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具。实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了。打个比方,如果把计算机硬件比作一个人的躯体,而系统内核则是人的大脑,至于shell,把它比作人的五官似乎更加贴切些。回到计算机上来,用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作。 笔者接触的linux发布版本(Redhat/CentOS)系统默认安装的shell叫做bash,即Bourne Again Shell,它是sh(Bourne Shell)的增强版本。Bourn Shell 是最早行起来的一个shell,创始人叫Steven Bourne,为了纪念他所以叫做Bourn Shell,检称sh。那么这个bash有什么特点呢? 1)记录命令历史 我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的.bash_history文件中。有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中。 与命令历史有关的有一个有意思的字符那就是”!”了。常用的有这么几个应用:(1)!! (连续两个”!”),表示执行上一条指令;(2)!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令;(3)!字符串(字符串大于等于1),例如!ta,表示执行命令历史中最近一次以ta为开头的指令。

如何做才能学好Shell脚本的经验总结

如何做才能学好Shell脚本的经验总结 大多同学反馈Shell脚本不容易学,感觉学完了Shell脚本这部分课程,还是不能写出脚本来。我来帮大家分析一下原因,并解说如何做才能学好Shell脚本。 之所以你觉得难学,写不出东西来。是因为,太生疏。写Shell脚本其实跟婴儿学走步,学骑自行车或者学游泳一样,这是一个熟练活儿。 要想写出一手漂亮的脚本,我总结了以下几点: 1 打好基本功 Shell脚本,本质上是多条Linux系统命令加上逻辑(条件、循环)构成的一个文本文档。要想实现一个需求,只要你可以用系统命令实现,那Shell脚本就可以实现。如果你Linux 命令都不会,那怎么能写出脚本来? 2 学好正则 如果你多写几个Shell脚本,就会发现,好多需求是从一个大字符串里截取出小字符串。这就需要你对正则表达式十分熟练,操作正则的几个工具也要熟练使用(grep/sed/awk)。 3 逻辑思维能力 大型的Shell脚本中,有很强的逻辑,条件满足时做什么,不满足时做什么。条件里面还可以嵌套条件,也可以嵌套循环(for、while等)。 这种逻辑能力并不是我们生来具备的,它是需要不断练习、长期积累出来的功力。 你可能会问,哪里有那么多的脚本需求?关键是没有机会练习啊。是的,这的确是个问题,尤其是正在学习阶段的同学,平时哪里有什么需求啊。要是上班了还好,每天有很多工作做,生产环境中也有不少需求用Shell脚本来实现。 对于学习阶段的同学,我考虑到你们的处境,所以去年花了几个月时间,在公众号里坚持每日发一个Shell练习题,这些资源你可以利用起来。其实,有不少同学只坚持了一个月就已经感觉到了明显的提升。

Shell编程基础教程

1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须放在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。 当编辑好脚本时,如果要执行该脚本,还必须使其可执行。要使脚本可执行: chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 1.1.3 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" # 现在打印变量a的内容: echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo "this is the $numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: num=2 echo "this is the ${num}nd"

这将打印: this is the 2nd 1.1.4 环境变量 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。 1.1.5 Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: s虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。 常用命令语法及功能: echo "some text": 将文字内容打印在屏幕上 ls: 文件列表 wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数 cp sourcefile destfile: 文件拷贝 mv oldname newname : 重命名文件或移动文件 rm file: 删除文件 grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令 cat file.txt: 输出文件内容到标准输出设备(屏幕)上 file somefile: 得到文件类型 read var: 提示用户输入,并将输入赋值给变量 sort file.txt: 对file.txt文件中的行进行排序 uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3 find: 搜索文件比如:根据文件名搜索find . -name filename -print tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux

Shell脚本例子集合

# vi xx.sh 退出并保存 # chmod +x xx.sh # ./xx.sh -2.调试脚本的方法 # bash -x xx.sh就可以调试了. -1.配置secureCRT的设置(我用的是6.2.3 build313版本,汉化版) 选项->会话选项(S)...->终端->仿真->终端(T)->把VT100改成Xterm->点中ANSI 颜色(A)和使用颜色方案(U)复选框. 这样就有颜色显示了. 选项->会话选项(S)...->终端->外观->字符编码(H)->从Default变到UTF-8. 这样就有中文显示了. 1.写一个脚本,执行后,打印一行提示"Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值.直到用户输入"end"停止. # vi show_var.sh 脚本内容: #!/bin/bash unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 命令保存后退出,并执行: # chmod +x show_var.sh # ./show_var.sh please input a number: 1 var is 1 please input a number: s var is s please input a number: end # 2.写一个脚本,测试位置参数

shell脚本实例

shell脚本实例 1. 写一个脚本,利用循环计算10的阶乘 #!/bin/sh factorial=1 for a in `seq 1 10` do factorial=`expr $factorial \* $a` done echo "10! = $factorial" 注:上面有一行,for a in `seq 1 10`,其中seq 1 10 , 即列出现1到10之间所有的数字,这一行也可改为:for a in "1 2 3 4 5 6 7 8 9 10" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然 后打印出该数值,然后再次要求用户输入数值。直到用户输入 "end"停止。 #!/bin/sh

while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和#!/bin/sh sum=0 for a in `seq 1 100` do if [ `expr $a % 3` -ne 0 ] then continue

echo $a sum=`expr $sum + $a` done echo "sum = $sum" 4.一个函数,利用shift计算所有参数乘积,假设参数均为整数( 特殊变量$# 表示包含参数的个数) #! /bin/sh result=1 while [ $# -gt 0 ] do result=`expr $result \* $1` shift done echo $result 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。 #!/bin/sh

PowerShell基础教程

PowerShell基础教程一:Windows PowerShell简介 XP/Server 2003/Vista/Server 2008操作系统的脚本语言。包括 Cmd.exe 、SH、KSH、CSH以及BASH Unix在内的大多数外壳程序的操作方式都是在新的进程中执行命令或实用工具程序,并以文本格式向用户显示结果。多年以来,许多文本处理实用工具程序,如sed、AWK 和 PERL,都已逐渐发展为支持这种交互模式。 这些外壳程序也会提供内置于外壳程序中并在外壳程序处理器中执行的 命令,例如KSH 中的typeset命令和以及 Cmd.exe 中的 dir 命令。在大多数外壳程序中,由于内置命令数量少,从而导致许多实用工具程序应运而生。 针对这一点,Windows PowerShell 有不同的做法。 ◆ Windows PowerShell 并不处理文本,而是处理以.NET平台为基础的对象; ◆Windows PowerShell 附带了数量庞大的内置命令集和一致的接口; ◆对于各个工具,全部的外壳程序命令都使用相同的命令剖析器,而非使用不同的剖析器,这项特点会使你更容易学会每种命令的使用方式。 其中最棒的就是你完全不需要舍弃已使用习惯的工具,你可以继续在Windows PowerShell 中使用诸如Net、SC 和 Reg.exe 等传统的 Windows 工具。 Windows PowerShell Cmdlet Cmdlet (发音如“command-let”) 是指在 Windows PowerShell 中用来操作对象的单一功能命令。你可以依据其名称格式来加以辨识 Cmdlet -- 以破折号 (-) 分隔的动词和名词,例如Get-Help、Get-Process 和 Start-Service。 在传统的外壳程序中,命令是极为简单 (例如 attrib.exe) 到极为复杂 (例如 netsh.exe) 范围内的可执行程序。 在 Windows PowerShell 中,大多数Cmdlet 都相当简单,而且设计成与其他Cmdlet 结合使用。例如,"get" Cmdlet 只提取数据,"set" Cmdlet 只创建或修改数据,"format" Cmdlet 只格式化数据,而 "out" Cmdlet 只将输出导向到指定的目的地。每种 Cmdlet 都具备可在输入下列命令时加以显示的说明文件:

Shell脚本学习指南笔记

入门 Shell脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型、特定的工作。 脚本编程语言与编译型语言的差异 许多中、大型程序都是编译型语言,如Fortran、Ada、C、C++或者Java(有些特殊)。这类程序只要从源代码(Source Code)转换成目标代码(Object Code)便能直接通过计算机执行。这样的好处是高效,缺点是它们多半运行于底层,处理的是字节、数字或是机器层级的对象,很难进行“将一个目录里所有文件复制到另一个目录中”这类对文件的简单操作。 脚本语言通常是解释型(interpreted)的,由解释器(interpreter)读入程序代码,将其转换成内部形式。好处是它们多半运行在比编译型语言高的层次,能够轻易处理文件与目录之类的对象,缺点是效率不如编译型。但是编写更快,而且目前的速度也已经足够快,常用脚本语言有:awk、Perl、Python、Ruby与Shell。Shell的特点有: 1.简单性 2.可移植性 3.开发容易 一个简单的脚本 who命令可以知道系统有谁登陆,如果有很多用户在登陆,结果会很长,可以使用wc(字数统计)命令,算出行数(line)、字数(word)和字符数(character)。可以使用wc –l,只计算出行数$ who | wc –l | 管道符号可以在两个命令之间建立管道(pipeline):who的输出成为了wc的输入。下面就写一个shell脚本将管道转变成一个独立的命令。 其实在Shell中开发周期很类似,先直接在命令行上测试,之后写入到独立的脚本中。 第一行的#! 当Shell执行一个程序时,要求Unix内核启动一个新的进程(process),在该进程里执行指定的程序。内核知道怎样为编译型程序执行,但Shell是解释型程序,当Shell要求内核执行时,内核无法执行,会回应”not executable format file”不是可执行的格式文件的错误信息。Shell收到此错误信息时,就会确定不是编译型程序,是Shell脚本,接着会启动一个新的/bin/sh副本来执行该程序。 在当前有很多种Shell,需要通过第一行#!来指定用哪个Shell来执行。一般如下: #! 解释器地址选项 比如标准的Shell脚本: #! /bin/sh

LinuxShell脚本编程实例

1、打印位置变量的个数和位置变量的内容 #! /bin/sh echo "Current command is $0" echo "The first parameter is $1" echo "The second parameter is $2" echo "The third parameter is $3" echo "Total of parameters if $#" echo "Current PID is $$" 2、循环打印“I love linux”3次 #!/bin/bash times=0 until [ "$times" = 3 ]; do echo "I love linux." sleep 2 times=`expr $times + 1` done 3、完成菜单程序的功能: 1)列出当前的文件 2)更改路径 3)编辑文件 4)删除文件 #!/bin/bash # menu shell script. until echo "List Directory..........1" echo "Change Directory........2" echo "Edit File...............3" echo "Remove File.............4" echo "Exit Menu...............5" read choice test $choice = 5 do case $choice in 1) ls;; 2) echo "enter target directory:" read dir cd $dir ;; 3) echo "enter file name:" read file vi $file

相关主题
文本预览
相关文档 最新文档