Linux shell script基础学习

前言:最近再看鸟哥的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 con3
do
     程序段落
done
for ( (初始值;限制值;执行步长) )
do
    程序段落
done




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值