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