Linux shell script基础学习

来源:互联网 发布:樱井知香怎么喷那么多 编辑:程序博客网 时间:2024/05/16 11:39

前言:最近再看鸟哥的Linux私房菜,这本书内容很多,很厚,看的时候,可以挑着看。我就是挑着看的,只看了第三部分,主要讲的是shell和shell script,还有正则表达式等比较重要的内容。

shell script:就是利用shell的功能写一个“程序”(program),这个程序是使用纯文本文件,将一些shell的语法和命令写在里面,搭配一些正则表达式、pip命令与数据流定向等功能,以达到我们想要的处理目的。

至于为什么要学shell script,原因太多了。。。

第一个shell script的编写与执行

shell script编写过程中,我们需要注意一些问题,下面我将列出来1命令的执行是自动从上到下、从左到右的分析与执行2命令的执行:命令、参数间的多个空格都会被忽略掉3空白行也会被忽略掉,并且tap键所得的空白同样也视为空格键4如果读到了一个enter符号,就开始尝试执行该行命令5至于如果一行内容太多,则可以使用“\[Enter]"来扩展下一行6”#“可作为批注。任何加在#后面的内容都会被视作批注文字而被忽略

 #!/bin/bash  2 #progam:  3 #       This programs shows "Hello World!" in your screen.  4 #history:  5 #2017/07/27 zhangguyuan  6 read -p "please input yourname:" firstname  7 echo  " yourname is:$firstname"  8 exit 0

可以看下这个简单的shell script,有以下几点需要说明一下:

1、第一行#!/bin/bash声明这个script使用的shell名称

因为我们使用的是bash,所以必须以#!/bin/bash来声明这个文件内的语法使用bash的语法

2、程序内容的说明

整个shell script中,除了第一行的#!是来声明shell的之外,其他的#都是批注

3、主要程序部分

在这个程序中就是echo那一行


编写shell script的好习惯

如果其他任何一种编程语言,都需要养成良好的编程习惯,便于我们后期程序的维护

一个好的shell script应该包含一下信息:

1、script的功能

2、script的版本信息

3、script的作者和联络方式

4、script的版权声明方式

5、script的history

6、script内比较特殊的命令,使用”绝对路径“的方式执行

7、script执行所需要的环境变量预先声明与设置


===================================================================================================

简单的shell script练习

1、我们首先来看一个简单的范例吧:

#!/bin/bash  2 #program:  3 #       user input 2 integer numbers;program will cross these two numbers.  4 echo "you should input 2 integer numbers,i will cross them\n"  5 read -p "first number:" firstnu  6 read -p "second number:" secnu  7 total=$(($firstnu+$secnu))  8 echo  "\n the result of $firstnum $secondnum is $total"  9 


如果你用心看一下的话,应该不难发现大概是做两位数加法计算的一个程序。

read -p允许用户输入数据保存在变量里面,total是两着的计算结果

2、利用test命令的测试功能(亲测比较好用)

当我要检测系统上面某些文件或者是相关属性时,利用test这个命令来工作真是好用得不得了,举例来说,我要检查/dmtsai是否存在时使用:

test -e /dmtsai && echo "exist" || echo "not exist"
如果当前目录下存在dmtsai这个文件,则会显示exist,否则not exist

3、利用判断符号[]

除了使用我喜欢的test之外,其实我们还可以利用判断符号"[]"来进行数据的判断,举例来说,我们想要知道$HOME这个变量是否为空的时候,可以这样做:

[ -z "$HOME" ]; echo $?
使用中括号的时候必须要特别注意,这个问题我开始使用的时候,找了好久的errors,直接无语死了,shell script的语法比其他的编程语言要更加严格,有点和golang类似严格。因为中括号要用到很多地方,包括通配符与正则表达式等。如果要在bash的语法中使用中括号作为shell的判断句,必须要注意中括号的两端需要有空格符来分隔。假设我使用0来表示空格键,那么这些地方需要使用空格键。举个例子:
[0"$HOME"0=0"$MAIL"0]


4、条件判断

*单层、简单的条件判断

if [条件判断式]; then条件成立,可以进行的工作内容fi<===结束if的意思

举个例子:

1 #!/bin/bash  2 read -p "please input (y/n)" yn  3 if [ "$yn" = "Y" ] || [ "$yn" = "y" ] ; then  4         echo "ok,continue"  5         exit 0  6 fi  7 if [ "$yn" = "N" ] || [ "$yn" = "n" ] ; then  8         echo "no,interrupt"  9         exit 0 10 fi 11 echo "i dont know what your choice is" && exit 0
*多重、复杂条件判断

if [ 条件判断式 ]; then条件成立,执行的工作else条件成立执行的工作fi

if [ 条件1 ]; then条件1成立执行的工作elif  [ 条件2 ]; then条件2成立执行的工作else 当1、2都不成立的时候,执行的工作fi
5、利用case...esac判断

case  $变量名字 in 《==关键字case,还有变量前的$      "第一个变量内容”)          程序段         ;; 《==每个类型结尾使用两个分号结束来处理      "第二个变量内容“)          程序段           ;;    esac 《==最后的case结尾
举个例子
 #!/bin/bash  2 case $1 in  3   "hello" )  4         echo "hello,how are you"  5         ;;  6    "")  7         echo "you must ,ex> {$0 someword}"  8         ;;  9     *) 10     echo "usage $0 {hello}" 11     ;; 12 esac

6、利用function功能

什么是函数呢?简单的说,function可以在shell script当中做出一个类似自定义的执行命令的东西,最大的功能就是帮我们简化很多的程序代码function的语法如下:

function fname(){}
但是有一点需要说明的是,这种语法在ubtun14.0版本上是会errors的,正确的需要去掉function,就ok。

举个例子

 #!/bin/bash  2 printit () {  3         echo "your choice is $1"  4 }  5   6 case $1 in  7         "one")  8                 printit 1  9                 ;; 10         "two") 11                 printit 2 12                 ;; 13         "three") 14                 printit 3 15                 ;; 16         *     ) 17                 echo "usage $0 {one|two|three}" 18                 ;; 19 esac~                                                                                                                                              ~                                             



=============================================================================

-------------------------------------------------------------------------------更新-------------------------------------------------

7、循环


1、while do done,until do done

一般来说,不定循环最常见的就是下面的这两种状态

while [ contion ]do    程序段落done

until [ contion ]do     程序段落done


2、固定循环 for...do...done

for var in con1 con2 con3do     程序段落done
for ( (初始值;限制值;执行步长) )do    程序段落done




原创粉丝点击