linux学习---shell编程

来源:互联网 发布:风月知相思 在线阅读 编辑:程序博客网 时间:2024/06/06 07:23

一.Shell编程

首先声明下,我是一个shell菜鸟,甚至连菜鸟都称不上,刚学了2shell,把学习的整理下,如果发现有什么错误,请指正,另外,如果想要了解详细的shell编程,请借助linux 那个男人,我发现man bash东西好多····

简单来说Shell是一个负责把用户的语法的语言解释成系统与内核调用的解释程序

最早的shell采用的语言是algol语言,后采用C语言

所以shell可以根据语言分类

Algol:sh,ksh,bash

C:csh,tcsh

目前我机器是安装的是ubuntu 16 04,默认是bash,所以后续后半部分采用bash去说明下shell的使用

可以使用 echo $SHELL来看下你默认的linux or unix版本的shell,执行如下,我们可以看到是默认执行/bin下的bash程序

二.编写第一个shell脚本

Shell脚本默认扩展名没有做强制要求,但是强烈推荐为*.sh

Shell编程用;或者 newline分隔命令

并且shell第一行必须用#!/bin/bash来指定shell解释程序

#!/bin/bashdatelsdate;ls

执行结果如下,需要注意的是在执行前必须通过chmod来增加执行权限

三.普通变量使用示例

因为shell是弱语言类型,所以无需声明类型

用如下形式定义

变量的引用

$变量名

程序源码

#!/bin/basha=20b=helloc= echo${a}${b}${c}echo $a d=20+30echo $d

执行结果

大家有没有看到一个奇怪的地方就是打印d的时候,居然打印出胡20+30,因为shell把他认为是字符串打印出来,解决这个有两种方法

1.      declare –i 变量

2.      typeset –i 变量

         

四.命令行变量

命令行参数一共有几个以下特殊的定义

$# ----à命令行参数个数

$*-----à所有命令行参数

$0-----à命令本身

$1~$9-----à第一个到第九个参数,注意,参数超过10个,需要自己解析

程序以及运行结果为

五.数组的操作

1.      数组定义

三种方式

1)  a[1]=10;a[4]=40

注意:shell数组并不要求下标是连续的

2declare -a b=(1 2 3 4)

3c=(hello world)

2.      数组的操作

1)  获取数组长度

declare -a b=(1 2 3 4)

echo 'b len'${#b[*]}

echo 'b len'${#b[@]}

执行结果

2)  读取某个下标值

c=(hello world)

echo ${c[1]}

执行结果

3)  打印整个数组下标

c=(hello world)

echo ${c[*]}

echo ${c[@]}

执行结果

4)  打印整个数组

a[1]=20;a[3]=30

declare -a b=(1 2 3 4)

c=(hello world)

echo ${!a[*]}

echo ${!b[*]}

echo ${!c[@]}

执行结果

六.流程控制

条件语句

1.      if语句

语法:

if 条件测试语句then           语句[elif 条件then           语句else           语句]fi

条件不清楚请参考:http://blog.csdn.net/xiaoxiaopengbo/article/details/78143393

来个实例体会下if语句

实例代码和运行图

循环语句

2.       for循环

语法:

for((表达式; 表达式; 表达式))do           语句done

实例代码和运行图

3.      While语句

语法:

while 条件测试do           语句done

实例代码和运行图

4.      Until语句

语法:

until 条件测试do           语句done

while的区别是while满足条件测试执行,而until是满足条件退出

实例代码和运行图

5.      For in语句

语法:

for 变量 in 字符串列表do           语句done

实例以及运行图

此处需要注意的点是:如果字符串被“”放进去,只会循环一次

选择语句

6.      Select语句

语法:

select 变量 in 列表do           语句done

此语句相当于在列表中选择,实例以及运行效果

注意$REPLY 会捕获你的输入,村早REPLY里面,这个会用到case

7.      Case语句

case 值 in值1)           语句           ;;值2)           语句           ;;*)           语句           ;;esac

实例和测试结果

七.综合案例

找到一个目录中的最新文件

#!/bin/bashif [[ -z$1 ]]then         workdir=.else         workdir=$1fi newfile=allfiles=`ls${workdir}`echo$allfiles for filein $allfilesdo         newfile=$file         break        done for filein $allfilesdo         if [[ $newfile -ot $file ]]         then                   newfile=$file         fidone if [[ -z$newfile ]]then         echo "dir is empty"else         echo newfile:$newfilefi