Linux学习之shell编程一

来源:互联网 发布:淘宝分享到微信打不开 编辑:程序博客网 时间:2024/05/16 17:41

获取变量的值可以使用$var或者${var}后者可以预防变量读取错误。$(command)可以获得命令的执行结果。

1. shell脚本的书写格式

  1 #!/bin/bash  2 #程序说明(包括日期,作者,程序作用等信息)  3 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin  4 echo -e "Hello World!\a\n"  5 exit 0

2. 条件判断

(1)利用test命令测试功能

例如查看某一文件是否存在:test -e filename

test -e poem.txt && echo "exist"||echo "Not exist"
当poem.txt存在时才会执行echo "exist",否则执行echo "Not exist"。

test命令关于文件的选项有以下几个:

-b file 如果文件为一个块特殊文件,则为真
-c file 如果文件为一个字符特殊文件,则为真
-d file 如果文件为一个目录,则为真
Sr:V\3J0-e file 如果文件存在,则为真
-f file 如果文件为一个普通文件,则为真
-g file 如果设置了文件的 SGID 位,则为真
-G file 如果文件存在且归该组所有,则为真
-k file 如果设置了文件的粘着位,则为真
-O file 如果文件存在并且归该用户所有,则为真
-p file 如果文件为一个命名管道,则为真
-r file 如果文件可读,则为真
-s file 如果文件的长度不为零,则为真
-S file 如果文件为一个套接字特殊文件,则为真
-t fd 如果 fd 是一个与终端相连的打开的文件描述符(fd 默认为 1),则为真
-u file 如果设置了文件的 SUID 位,则为真
-w file 如果文件可写,则为真
-x file 如果文件可执行,则为真

另外关于两个文件之间的比较选项有:

-ef

-nt

-ot


test  file1 -ef file2测试以判断两个文件是否与同一个设备相连,是否拥有相同的 inode 编号
test  file1 -nt file2 测试以判断第一个文件是否比第二个文件更新(由修改日期决定)
test  file1 -ot file2 测试以判断第一个文件是否比第二个文件更旧

关于字符串的判断选项有:

test  -z  string  判断string是否为空

test  -n  string  判断string是否非空

test  str1=str2  判断str1是否等于str2

test  str1!=str2  判断str1是否不等于str2

多重条件判断:

-a  两个条件同时成立  例如test -r file1 -a -x file1,判断file1是否同时可读可执行

-o  任何一个条件成立  例如test -r file1 -o -x file1,判断file1具有可读或者可执行权限

!  取反,例如test !-x  file1,file1不具有可执行权限时,返回true


(2)利用[ ]进行条件判断

除了使用test命令进行条件判断之外,还可以使用符号[]来判断。

例如

 [ -z "$HOME" ] ; echo $?

需要注意的是:

在中括号[]内的每个组件都要用空格分隔;

在中括号内的变量和常量最好都以双引号引起来。

例如根据用户输入字符y或n分别显示yes或no

  #!/bin/bash  read -p "please input you chaoice(y/n)" ch  [ "$ch" == "Y" -o "$ch" == "y" ] && echo "Yes!" && exit 0  [" $ch " == "N" -o "$ch" == "n" ] && echo "No!" && exit 0  echo "I don't know what you input~"                                         



0 0