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的文件 command1 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跳过