当前位置:文档之家› Linux shell编程学习笔记2

Linux shell编程学习笔记2

Linux shell编程学习笔记2
Linux shell编程学习笔记2

Linux shell编程学习笔记(二)--chinaitlab linux学习视频

2008-03-07 00:31

第三章 shell的输入和输出

1.echo echo [option] string

-e 解析转移字符

-n 回车不换行,linux系统默认回车换行

转移字符 \c \t \f \n

#!/bin/bash

#echo

echo -e "this echo's 3 newlne\n\n\n"

echo "OK"

echo

echo "this is echo's 3 ewline\n\n\n"

echo "this log file have all been done">mylogfile.txt

[test@szbirdora ~]$ sh echod.sh

this echo's 3 newlne

OK

this is echo's 3 ewline\n\n\n

上面可以看到有-e则可以解析转移字符,没有不能解析。echo空输出为空

2.read可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量read variable1 variable2

eg.

#!/bin/bash

#readname

echo -n "first name:"

read firstname

echo -n "last name:"

read lastname

echo "this name is $firstname $lastname"

3.cat 显示文件的内容,创建内容,还可以显示控制字符

cat [options]filename1 filename2

-v显示控制字符(Windows文件)

cat命令不会分页显示,要分页可以采用more、less

4.管道|

5.tee 把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中,一般与管道合用

tee [options] files

-a在文件中追加

eg.

[test@szbirdora 1]$ echo |tee myfile

[test@szbirdora 1]$ cat myfile

将myfile文件置空

6.文件重定向

command>filename ---覆盖输出command>>filename ---追加输出command>filename>&1 ---把标准输出和标准错误重定向

command<

command

command<- --- 关闭标准输入

>nullfile.txt ---创建字节为0的文件

command1command3 ---按从左到右顺序执行

eg.

说明:myfile为空间

[test@szbirdora 1]$ df -lh>myfile

[test@szbirdora 1]$ cat myfile

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 20G 3.3G 16G 18% /

none 2.0G 0 2.0G 0% /dev/shm

/dev/sda2 79G 17G 59G 23% /u01

/dev/sda4 28G 3.9G 22G 15% /u02

[test@szbirdora 1]$ df -lh>myfile

[test@szbirdora 1]$ cat myfile

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 20G 3.3G 16G 18% /

none 2.0G 0 2.0G 0% /dev/shm

/dev/sda2 79G 17G 59G 23% /u01

/dev/sda4 28G 3.9G 22G 15% /u02

[test@szbirdora 1]$ df -lh>>myfile

[test@szbirdora 1]$ cat myfile

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 20G 3.3G 16G 18% /

none 2.0G 0 2.0G 0% /dev/shm

/dev/sda2 79G 17G 59G 23% /u01

/dev/sda4 28G 3.9G 22G 15% /u02

Filesystem Size Used Avail Use% Mounted on

/dev/sda1 20G 3.3G 16G 18% /

none 2.0G 0 2.0G 0% /dev/shm

/dev/sda2 79G 17G 59G 23% /u01

/dev/sda4 28G 3.9G 22G 15% /u02

[test@szbirdora 1]$ cat >>myfile<

> China

> Hubei

> Suizhou

> exit

[test@szbirdora 1]$ cat myfile

China

Hubei

Suizhou

7.exec可以用来替代当前shell。现有任何环境变量都会清除

第四章控制流结构

1.if语句

if 条件1

then

命令1

elif 条件2

then

命令2

else

命令3

fi

------------------

if 条件

then 命令

fi

eg:

#!/bin/bash

#if test

#this is a comment line

if [ "10" -lt "12" ];then

#yes 10 is less than 12

echo "yes,10 is less than 12"

else

echo "no"

fi

注意:if语句必须以fi终止

"10" 前一个空格,“12”后也有一个空格。这个条件都是通过test命令来指定。

条件表达为test expression或者[expression]

条件表达式中的比较函数

man test

NAME

test - check file types and compare values

SYNOPSIS

test EXPRESSION

[ EXPRESSION ]

[ OPTION

DESCRIPTION

Exit with the status determined by EXPRESSION.

--help display this help and exit

--version

output version information and exit

EXPRESSION is true or false and sets exit status. It is one of: ( EXPRESSION )

EXPRESSION is true

! EXPRESSION

EXPRESSION is false

EXPRESSION1 -a EXPRESSION2

both EXPRESSION1 and EXPRESSION2 are true EXPRESSION1 -o EXPRESSION2

either EXPRESSION1 or EXPRESSION2 is true [-n] STRING

the length of STRING is nonzero

-z STRING

the length of STRING is zero

STRING1 = STRING2

the strings are equal

STRING1 != STRING2

the strings are not equal

INTEGER1 -eq INTEGER2

INTEGER1 is equal to INTEGER2

INTEGER1 -ge INTEGER2

INTEGER1 is greater than or equal to INTEGER2 INTEGER1 -gt INTEGER2

INTEGER1 is greater than INTEGER2

INTEGER1 -le INTEGER2

INTEGER1 is less than or equal to INTEGER2

INTEGER1 -lt INTEGER2

INTEGER1 is less than INTEGER2

INTEGER1 -ne INTEGER2

INTEGER1 is not equal to INTEGER2

FILE1 -ef FILE2

FILE1 and FILE2 have the same device and inode numbers FILE1 -nt FILE2

FILE1 is newer (modification date) than FILE2

FILE1 -ot FILE2

FILE1 is older than FILE2

-b FILE

FILE exists and is block special

-c FILE

FILE exists and is character special

-d FILE

FILE exists and is a directory

-e FILE

FILE exists

-f FILE

FILE exists and is a regular file

-g FILE

FILE exists and is set-group-ID

-h FILE

FILE exists and is a symbolic link (same as -L)

-G FILE

FILE exists and is owned by the effective group ID -k FILE

FILE exists and has its sticky bit set

-L FILE

FILE exists and is a symbolic link (same as -h)

-O FILE

FILE exists and is owned by the effective user ID -p FILE

FILE exists and is a named pipe

-r FILE

FILE exists and is readable

-s FILE

FILE exists and has a size greater than zero

-S FILE

FILE exists and is a socket

-t [FD]

file descriptor FD (stdout by default) is opened on a terminal -u FILE

FILE exists and its set-user-ID bit is set

-w FILE

FILE exists and is writable

-x FILE

FILE exists and is executable

eg.

#!/bin/bash

#if test

#this is a comment line

echo "Enter your filename:"

read myfile

if [ -e $myfile ]

then

if [ -s $myfile ];then

echo "$myfile exist and size greater than zero"

else

echo "$myfile exist but size is zero"

fi

else

echo "file no exist"

fi

[test@szbirdora 1]$ sh iftest.sh

Enter your filename:

11

11 exist but size is zero

2.case语句

case语句为多选择语句。

case 值 in

模式1)

命令1

;;

模式2)

命令2

;;

esac

eg.

#!/bin/bash

#case select

echo -n "enter a number from 1 to 3:"

read ans

case $ans in

1)

echo "you select 1"

;;

2)

echo "you select 2"

;;

3)

echo "you select 3"

;;

*)

echo "`basename $0`:this is not between 1 and 3">&2

exit;

;;

esac

3.for 循环

for循环一般格式:

for 变量名 in 列表 (列表以空格作为分割)

do

命令1

命令2

done

eg:

#!/bin/bash

#forlist1

for loop in 1 2 3 4 5

do

echo $loop

done

4.until循环

until 条件

do

命令1

命令2

...

done

条件测试发生在循环末尾,所以循环至少可以执行一次。

5.

while循环

while 命令(可以是一个命令也可以是多个,做条件测试)do

命令1

命令2

...

done

注意:如果从文件中读入变量

6.break和continue控制

break跳出,continue跳过

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