`
king_tt
  • 浏览: 2113099 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

初学shell脚本--shell语法使用

 
阅读更多

这两天初次接触shell编程,所谓shell编程其实就是用一定的语法将各种基本的命令组合起来,让shell程序去解释执行。如果对windows的dos有了解,可以这样理解,其实shell脚本文件和.bat批处理文件差不多,不过linux下的shell比起windows的dos强大很多。

  shell有很多种,如bash、sh 、tcsh、 ksh等,linux系统里面默认使用的是bash。

  下面看一下学习shell的第一个程序:

  输入命令vi my_01.sh,创建一个my_01.sh文件并用vi编辑器打开。编辑内容如下:

1 #!/bin/bash
2 echo "aaaa"
3 echo "第一次接触shell"

  这里第一行是指让bash这个shell去执行这个shell程序。echo是用来输出的,第二行和第三行分别输出两句话。

执行这个shell程序可以用如下几种方法:

  1 ./my_01.sh

  2 . my_01.sh

  3 bash my_01.sh

注:新创建的文件默认是没有执行权限的,所以必须给该文件授予执行权限后才能执行。授权命令:chmod u+x my_01.sh或者chmod 755 my_01.sh

  下面是第二个shell程序:

1 #!/bin/bash
2 #my_02.sh
3 read -p "please input your name:" name
4 echo "$name,welcome!"

  这里第三行read命令是指等待用户输入,-p后面是指提示,它还有一个参数-t是设置等待时间的。这个程序运行结果如下:

[liuling@bogon test]$ ./my_02.sh
please input your name:liuling
liuling,welcome!

  注:第四行echo使用的是双引号,如果使用单引号的话,则这句就会直接输出 $name,welcome! 。双引号是可以解析里面的变量的,而单引号则不行。

下面看看shell脚本的语法:

一、条件判断if else的使用

if分支语句的写法:

if 条件测试
    then 满足条件执行什么
    else 不满足条件执行什么
fi

多分支写法:

复制代码
if 条件1
    then 
    执行命令2
elif 条件1
    then 
    执行命令2
else
    执行命令3
fi
复制代码

   注:if和fi要配对,以fi结束这个条件判断。在不满足第一个条件下再判断使用的是elif,而不是else if。then必须独占一行。

下面看几个例子:

复制代码
 1 #!/bin/bash
 2 #my_03.sh
 3 
 4 read -p "pelease input your name:" name
 5 read -p "pleaase input your password:" passwd
 6 #if test $name = "liuling" 
 7 if [ $name = "liuling" -a $passwd = "lz19921009" ]
 8 then
 9     echo "登录成功!"
10 else
11     echo "登录失败!"
12 fi
复制代码
复制代码
 1 #!/bin/bash
 2 #my_04.sh
 3 
 4 read -p "please input your score:" score
 5 
 6 if [ $score -gt 90 ]
 7 then
 8     echo "优秀!"
 9 elif [ $score -gt 80 -a $score -le 90 ]
10 then
11     echo "良好!"
12 else
13     echo "一般!"
14 fi
复制代码
复制代码
 1 #!/bin/bash
 2 #my_05.sh
 3 
 4 read -p "please input your score:" score
 5 #如果使用(())的话,只能用< > >= <=
 6 if (( $score > 90 ))
 7 then
 8     echo "优秀!"
 9 elif [[ $score -gt 80 && $score -le 90 ]]
10 then
11     echo "良好!"
12 else
13     echo "一般!"
14 fi
复制代码

  测试用户输入的文件名是目录还是文件:

复制代码
 1 #!/bin/bash
 2 #my_06.sh
 3 
 4 read -p "请输入一个目录或者文件名:" name
 5 if [ -z $name ]
 6 then
 7     echo "你输入的信息为空!"
 8 else
 9     if [ -f $name ]
10     then
11         echo "这是一个文件!"
12     elif [ -d $name ]
13     then
14         echo "这是一个目录!"
15     else
16         echo "不存在这样一个目录或者文件!"
17     fi
18 fi
复制代码

  这三个例子都是关于if条件判断的用法。条件有这么几种写法:[ 条件 ]、test 条件、[[ 条件 ]]、(( 条件 )),用的最多的是第一种。常用判断符号如下

①、逻辑运算符

  -a  expr1 -a expr2  逻辑与

  -o  expr1 -o expr2  逻辑或

  !  !expr1      逻辑非

②、数值判断

  -eq  num1 -eq num2  是否相等

  -ne  num1 -ne num2  是否不相等

  -gt  num1 -gt num2  是否大于

  -ge  num1 -ge num2  是否大于等于

  -lt  num1 -lt num2  是否小于

  -le  num1 -le num2  是否小于等于

③、字符串判断

  =  str1 = str2  字符串是否相等

  !=  str1 != str2  字符串是否不等

  -n  -n str1    字符串长度是否不等于0

  -z  -z str2    字符串长度是否等于0

④、文件判断

  -r  -r filename  文件是否存在且可读

  -w  -w filename  文件是否存在且可写

  -s  -s filename  文件是否存在且长度非0

  -f  -f filename  文件是否存在且是普通文件

  -d  -d filename  文件是否存在且是一个目录

  在使用条件判断的时候一定要注意空格,如if [ $name = "liuling" -a $passwd = "lz19921009" ],[]里面前后要有一个空格,所有的判断符号以及逻辑运算符号前后都要有空格,否则会报错。使用[[条件 ]]的时候只能使用"&&"符号作为逻辑与来代替"-a",如果使用(( 条件 ))的话,只能用< > >= <=符号,而不能使用“-eq”等符号。

二、case的用法

  这里的case优点类似于java中的swith case

case语法如下:

复制代码
case var in
pattern 1)
    执行语句1
    ;;
pattern 2)
    执行语句2
    ;;
pattern 3)
    执行语句3
    ;;
*)
    执行语句4
    ;;
esac
复制代码

注意:*)指匹配其他任意字符串
每种情况都以;;结束

下面是几个case用法的例子

  1.模拟菜单的选择

复制代码
 1 #!/bin/bash
 2 #my_07.sh
 3 
 4 echo "1 - 普通显示"
 5 echo "2 - 详细显示"
 6 echo "3 - 显示隐藏文件"
 7 echo "4 - 推出"
 8 
 9 read -p "请选择操作号:" num
10 case $num in
11     1) 
12         ls ;;
13     2)
14         ls -l ;;
15     3)
16         ls -al ;;
17     4)
18         exit ;;
19     *)
20         echo "请输入正确的操作(1--4)" 
21         exit ;;
22 esac
复制代码

三、循环语句的使用

1、for循环

for 变量名 in 取值列表
do
    命令序列
done


下面是for循环使用的小例子:

复制代码
 1 #!/bin/bash
 2 #my_08.sh
 3 
 4 for a in `seq 1 3 10`
 5 do
 6     echo $a
 7 done
 8 echo "-------------------"
 9 for ((i=1;i<=10;i++))
10 do
11     echo $i
12 done
复制代码

  这里第四行使用了`seq 1 3 10`,``是反引号,也就是键盘上Esc下面的一个键,``里面可以写执行命令,把执行后的结果返回。

  seq命令是指序列,seq start size max,start是起始,size是步长,max就是限制的数,比如seq 1 3 10,则返回的是1 4 7 10。

  第9行代码也有点特别,有点像java里面的for循环,不过是双重小括号,在shell中这样也是可以的。

  下面是一个统计文件数目的小程序:

复制代码
 1 #!/bin/bash
 2 #my_09.sh
 3 
 4 i=0
 5 for name1 in `ls /etc`
 6 do
 7    # i=`expr $i + 1`
 8    # let i++
 9    # i=$[$i + 1]
10    # i=$(($i + 1))
11    ((i++))
12 
13 done
14 echo "文件总数为:$i"
复制代码

  注:7、8、9、10、11行是数字自增的不同写法,都可以。

2、while循环

while 条件
do
    命令序列
done

下面是一个录入客户资料的shell脚本:

复制代码
 1 #!/bin/bash
 2 #my_10.sh
 3 
 4 while true
 5 do
 6         echo "登记客户资料(c继续,q退出):"
 7         read choice
 8 
 9         case $choice in
10                 c)
11                         echo "请输入客户名字:"
12                         read name1
13                         echo "请输入客户年龄:"
14                         read age1
15                         echo "姓名:"${name1}" - 年龄:"${age1} >>customer.txt
16                         ;;
17                 q)
18                         exit
19                         ;;
20         esac
21 done
复制代码

注:
>>是指重定向,将标准输出重定向到其他的输出流中,如上面15行是指将标准输出重定向到customer.txt文件。所以echo输出的内容会输出到customer.txt文件中去。

>> 和 > 区别

>>customer.txt 追加保存到customer.txt文件中, 如果文件不存在会自动创建。

>customer.txt 就会重新写入, 覆盖原有的数据

四、函数的应用

复制代码
function 函数名(){

}
or
函数名(){

}

函数调用:
函数名
函数名 参数1 参数2
复制代码

下面是一个小例子程序:

复制代码
1 #!/bin/bash
2 #fun.sh
3 function add(){
4     echo $(($1+$2))
5 }
6 add 20 30
7 add 20 90
复制代码

  

我喜欢,驾驭着代码在风驰电掣中创造完美!我喜欢,操纵着代码在随必所欲中体验生活!我喜欢,书写着代码在时代浪潮中完成经典!每一段新的代码在我手中诞生对我来说就象观看刹那花开的感动!
欢迎分享与转载
分享到:
评论

相关推荐

    shell脚本的demo

    基础的shell脚本的demo,可以帮助初学者了解shell的语法

    SHELL脚本编程一本入门级的脚本编程教材、文档、资料

    SHELL脚本编程,一本入门级的脚本编程教材、文档、资料,内容包涵基本shell脚本指令及语法。很适合初学者学习!

    shell脚本教程详细讲解

    该文档详细讲解了shell脚本语言的基本语法,基本概念,初学者也可以很快上手。

    ShellCheck,用于Shell脚本的静态分析工具-Linux开发

    ShellCheck-一个Shell脚本静态分析工具ShellCheck是一个GPLv3工具,可为bash / sh Shell脚本提供警告和建议:ShellCheck的目的是指出并阐明典型的初学者语法i ShellCheck-Shell脚本静态分析工具ShellCheck是一个提供...

    Linux Shell编程从初学到精通(第2版)[2015.1].zip

    本书结合大量的示例,系统、全面地介绍了bash Shell脚本编程的语法、命令、技巧、调试等内容,在书中还有很多练习可以引导读者思考,力求使读者掌握Linux bash Shell编程的所有特性。 本书结构清晰、易教易学、实例...

    advanced_development_shell_tools:高级开发Shell工具-http

    对shell命令和脚本感兴趣的开发人员或初学者可以查看我的资源并找到文档化的命令和语法, 可以用作shell脚本的参考,并有助于自己编写脚本。如何通过上游变更进行更新为了保持本地更新的“ advanced_development_...

    shell初学者学习指南

    此本书籍简单介绍关于Linux,shell脚本编写的基本语法,适合初学者学习。

    linux系统下 shell脚本用法

    用于哪些初学者 ,提供帮助。里面涉及到linux各种语法

    ShellCheck:用于Shell脚本的静态分析工具-开源

    ShellCheck突出显示并阐明了典型的初学者的语法错误和导致外壳程序给出神秘错误消息的问题。 它显示了典型的中级语义问题,这些问题会导致外壳在异常和违反直觉的情况下表现出来。 它还可以发现可能在将来可能发生...

    Linux shell编程PPT

    本PPT简明扼要讲解shell编程的基本知识,每部分包含实例,使初学者半天掌握shell 编程。 基本内容:1、创建Shell脚本文件;2、2、执行Shell脚本;3 Shell语法;4 awk和正则表达式;5 Shell编程综合实例。

    bash-study:shell学习笔记

    BASH STUDY这个项目目的在于学习 bash.#说明由于初学shell,所以进程管理和系统级shell 没有记录。#历史2014.3,读了 《学习 bash》第二版。2014.3.14,建立目录框架2014.3.28,增加了 awk,windows bat, python 脚本。...

    入门学习Linux常用必会60个命令实例详解doc/txt

    chsh命令的作用是更改使用者shell设定,它的使用权限是所有使用者。 2.格式 chsh [ -s ] [ -list] [ --help ] [ -v ] [ username ] 3.主要参数 -l:显示系统所有Shell类型。 -v:显示Shell版本号。 4....

    intro2UnixandSGE:Unix和SGE初学者的资源

    了解和编写基本的Shell脚本 了解Grid Engine和排队系统 能够将作业提交到Grid Engine集群并进行故障排除 为发展做贡献 您可以使用GitHub功能(例如拉动请求和问题创建)为本指南的开发做出贡献。 建立书 这本书是用...

    高级Bash脚本编程指南(杨春敏 黄毅 译) PDF

    Bash 编程类的最佳图书,书名虽然是高级,但其实对初学者来说也非常实用。它全面且系统地讲解了bash编程的语法、习惯用法。由浅入深,非常详细,也有很多具体的案例,现在已经更新到第十版(Rerision 10)。

    vim使用进阶:vim使用技巧、配置、命令和插件

    本文是本系列的序言,讲述我使用vim的经历和心得,以及对vim初学者的一些建议。文中的抓图展示了我的vim使用环境。 vim使用进阶: 使用会话和viminfo 本文介绍如何使用vim的会话 (session) 和viminfo来恢复vim的...

    高级Bash脚本编程指南ABS_Guide PDF 中文版

    《高级 Bash 脚本编程指南》是一本广受好评的 Bash 脚本编程著作,原作者是 Mendel Cooper ,其原始版本地址是:http://tldp.org/LDP/abs/html/index.html ,豆瓣链接在此,评分高达 9.0分,其江湖地位斐然,可以...

    Tcl_TK编程权威指南pdf

    作为一种脚本语言,Tcl与其他的Unix shell语言,如Bourne Shell(sh)、C Shell(csh)、Korn Shell以及Perl类似。Shell程序可以让你执行其他的程序。它们提供了足够的可编程特性(变量、流程控制和过程),使你可以将现有...

    Perl 实例精解(第三版).pdf

    对每个主题都使用了范例说明,从Perl变量、正则表达式,到编写报表、CGI脚本和网络应用,并对范例程序进行了解释。读者可以很容易地通过这些范例掌握Perl语言的语法。附录含有完整的函数和定义、命令行开关、特殊...

    script命令 记录终端交互会话过程

    以备之后查询与学习,对于初学者、保留工作记录和准备写材料的人而言,这是一个非常有用的工具 在下述语法中,输出文件是用于存储所有的上机会话过程。如果未指定输出文件,所有的会话过程将会写到当前工作目录的...

Global site tag (gtag.js) - Google Analytics