当前位置:  操作系统/服务器>linux

shell脚本编程之if语句学习笔记

    来源: 互联网  发布时间:2014-10-17

我不是研究linux下的东西的,所以这里只对shell脚本的用法做一个介绍,把我自己在使用过程中出现的问题记录下来,同时也是写下一些shell脚本语法的规则,方便以后查看。先来学习一下条件语句if的用法,通过这一个简单的语法来说明一下shell脚本编程时候的东西。

代码如下:

#!/bin/sh
echo "please input text1"
read text1
echo "please input text2"
read text2
#判断字符串等或者是不等只有一个等号
if test $text1 = $text2
then
echo "text1 equals text2"
else
echo "text1 not equals text2"
fi

#判断字符串是否为空,这里的判断记得在$text1俩边加上双引号
if [ -z "$text1" ]
then
echo "text1 is null"
fi
if [ -n "$text1" ];then
echo "text1 is not null"
fi

#算术比较 text1和text2中的内容只能是数字
if [ "$text1" -eq "$text2" ];then
echo "equal"
elif [ "$text1" -gt "$text2" ];then
echo "great"
elif [ "$text1" -le "$text2" ];then
echo "little and equals"
fi

echo "input a file or not file"
read file
#判断是文件还是目录
if [ -d $file ];then
echo "$file is a directory"
elif [ -f $file ];then
echo "$file is a file"
fi
#判断文件的大小是否为空
if [ -s $file ];then
#echo -n是为了去掉换行符
echo -n "$file'size is not null"
fi

#判断文件的读写权限
if [ -f "$file" ];then
 if [ -r "$file" ];then
 echo "read"
 fi
 if [ -w "$file" ];then
 echo "write"
 fi
 if [ -x "$file" ];then
 echo "exe"
 fi
fi

exit 0

我们一点点的来分析一下这个程序,第一行是一个特殊的注释语句,在linux的shell下,使用#作为注释,所以如果你想注释东西就要以#开头,第一行的注释语句是告诉shell执行这个shell脚本的时候使用的是/bin/sh这个目录下的shell。接着使用echo命令来输出一行语句,echo后边的字符串最好用双引号引起来,以后凡是字符串最好都用双引号引起来,这可以避免一些很难查找到的bug,echo后边如何加上-n选项,则代表语句输出以后是不换行的。接着是read命令,这个命令的作用是读取输入到变量text1中,在shell脚本中,我们使用变量的时候不需要预先定义,用的时候直接这样用就可以了。接下来就说到了我们本篇博客要说明的if条件语句了,这个if的语法是if..then..elif..then..else..fi具体的看看代码,代码中已经有了体现,在c语言中我们使用if来判断的时候都是将判断语句写在括号中的,这里的判断是使用test命令来判断,你把它理解为在小括号中一样就可以了,test的判断可以是对字符串的判断,对数值的判断,对文件目录等的判断,这个test可以用[符号来代替,这就是在程序的后边没有使用test而是使用[号的原因,[的判断最后要以]号结尾,判断语句写在中括号中,因为[代表的就是test,所以[和后边的判断条件有空格。接下来说回来test可以判断的类型,代码中显示对字符串的判断,注意我们判断text1和text2相等的时候用的是一个等号,大家c语言习惯了不要忘记是一个等号,对变量的取值采用的是在变量前边加了$符号,这样就获得了变量的值了。同时也要加上双引号,你不加也许发现不了错误,但是如果输入是空,也就是直接敲下了回车键,这个时候判断就成了if test = text2,test后边没有东西当然不对了,如果加上双引号是这样的if test "" = text2,这样就不会出错了。其他的关于一些选项,例如-z、-n、-gt、-f、-r等等这些东西每一个都是英文单词的简写,很简单略过!接下来运行shell程序,使用chmod +x命令赋予可执行的权限,然后运行,一切ok!


    
相关技术文章:
    ▪shell脚本编程之循环语句学习笔记

     本篇博客很简单,看一下shell编程使用到的循环语句,包括for循环,while循环,until循环,for后边跟一个变量,然后是一个集合,将集合中的东西赋给这个变量,每次循环执行,这跟java中的foreach很像,while循环和if使用同样的条件判断,满足条件执行语句,until和while相反,不满足条件执行语句,是不是很简单啊,下面看一下代码吧。 代码如下: #!/bin/sh #for循环最基本的用法 for var in "hello" "xiao ta" "welcome to www." do echo -n "$var " done echo #通配符扩展 for var in $(ls *.sh) do......


    ▪shell脚本编程之case语句学习笔记

     case语句是用来实现多个if..else的功能的,但是用法上有些不同,学过其他语言的人都知道,case中要对变量进行匹配,如果有一个匹配成功的话就执行相应的语句。shell编程中的case语句也是这个意思,case会对字符串进行匹配,是从第一个模式开始的,如果有一个模式已经匹配成功的话,其他的模式就不会再进行匹配了,下面看下代码中的用法吧。 #!/bin/sh echo "please yes or no" read input #case语句的基本用法,记住每一个匹配后边都有双分号,代表本模式的结束和下一个#模式的开始,在进行通配符匹配的时候不要加双引号 case ......


    ▪Shell脚本实现的阳历转农历代码分享

     闲来无事,想在Linux下用shell写一个阳历转农历的脚本,断断续续大概一个星期终于搞定。现在拿出来与大家分享。 1、缘由 本脚本实现原理是查表法(因为公式有误差);基于农历新年为基准,对农历新年前后两个不同的农历进行计算。 写这个脚本之前是想在Linux 终端命令提示符中加入阳历及农历日期。在Ubuntu中有Lunar软件可以获取农历日期,但在Fedora或CentOS中并没有类似软件,所以就想自己来实现一个,但网上用其他语言写的一大把,如果再写没什么必要。所以就想用shell来写一个。 2、功能及使用 功能:将......


 
最新技术文章:
    ▪linux系统中的列出敏感用户的脚本代码

     此处的敏感用户是指这个用户属于多个组,或者这个用户属于的组名跟这个用户名不一样 #! /bin/bash #list user who belong to more than one group #and list user who belong to the group which isn't the same as the username #w is whitelist,we will not think user in this whitelist is special or dangerous w=("root" "adm" "games" "operator" "halt" "shutdown" "sync" "daemon" "bin" "operator") function WhiteList() { for i in ${w[@]} do if [ "$i" == "$1" ];then return 1 fi done return 0 } IFS=" " for LINE in `cat /etc/passwd|awk -F: '{print $1}'` do WhiteList $LINE; #if $? equal 1,means i......


    ▪a10 config backup for aXAPI

     #!/bin/bash ################################################# # # script by Vincent yu # created at 20140306 # a10 config backup for aXAPI version: 2.1 # # ################################################# A10IP="1.1.1.1 1.1.1.2" USER=admin PASSWORD=a10 TODAY=`date "+%Y%m%d"` BACKUPDIR=/path/$TODAY TIMENOW=`date "+%Y%m%d%H%m"` LOG="/tmp/mail" MAILLIST="ng@ng.com.tw" for COUNT in $A10IP do METHOD1="method=authenticate&username=$USER&password=$PASSWORD" SESSION=`curl -k --data $METHOD1 https://$COUNT/services/rest/V2.1/ | sed -n -e 's/.*\(.*\)<\/session_id>.*/\1/p'` if [ ! -d $BACKUPDIR ];then mkdir -p $BACKUPDIR fi GETHOST_......


    ▪一键备份gitolite服务器的Shell脚本

     运行一次就能够把gitolite服务器上的仓库备份到本地. 第一次运行会创建远程仓库的本地镜像, 以后每次运行会把本地镜像更新. 本程序只支持 ssh方式 其他的git server貌似不会在 ssh git@xxx 的时候返回repo列表, 所以只能手动备份. #!/bin/sh server=serv_addr root_dir=`pwd` echo "whill back in dir: ${root_dir}" ssh "git@${server}" | awk '{print $1$2,$3}' | grep "^RW" | awk '{print $2}' | while read line do echo " " echo "-------------------------------------" if [ ! -d "${root_dir}/${line}.git" ]; then echo "repo not init on local, init it ..." mkdir -p "${root_dir}/${line}.git" ......


 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2015,169IT.COM,站长邮箱:www_169it_com#163.com(请将#改为@)

浙ICP备11055608号