天天看點

Linux shell程式設計學習執行個體與參數分析(二)

第三章 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.

#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 在檔案中追加

[test@szbirdora 1]$ echo |tee myfile

[test@szbirdora 1]$ cat myfile

将myfile檔案置空

6.檔案重定向

command>filename                                        ---覆寫輸出

command>>filename                                      ---追加輸出

command>filename>&1                                 ---把标準輸出和标準錯誤重定向

command<<delimiter                                     ---輸入直到delimiter分解符

command<filename                                       ----輸入檔案内容到指令

command<-                                                     --- 關閉标準輸入

>nullfile.txt                                                       ---建立位元組為0的檔案

command1<filename>command3               ---按從左到右順序執行

說明:myfile為空間

[test@szbirdora 1]$ df -lh>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<<exit

> China

> Hubei

> Suizhou

> exit

China

Hubei

Suizhou

7.exec        可以用來替代目前shell。現有任何環境變量都會清除

第四章 控制流結構

1.if語句

if 條件1

then

     指令1

elif 條件2

     指令2

else

     指令3

fi

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

if 條件

then 指令

eg:

#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"

echo "no"

注意: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

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

echo "file no exist"

[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

#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;

3.for 循環

for循環一般格式:

for 變量名 in 清單 (清單以空格作為分割)

do

   指令1

   指令2

done

#forlist1

for loop in 1 2 3 4 5

echo $loop

繼續閱讀