`
mncc
  • 浏览: 52808 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux下的程序开发:基础SHELL编程

阅读更多

(这个本来是写在我TOM的blog上的。。。看看还行。。就放过来吧。。希望大家到我TOM的blog常转转http://blog.tom.com/monicc

 

很奇怪javaEye为什么没有Linux/Unix的圈子。。。。

    前些天把工作辞了,准备找个做开发的。于是到招聘会现场了。。。。挤死了。。。。中国果然是最不缺的就是劳动力啊。。。。

    还是看看吧。。。我估计我是不想继续再呆在山西了。。。还是先发上些简历吧。。。看来还是工作经验的问题啊。。。说实话。。。偶是07年毕业的。。。可以说工作经验不到一年(如果按照毕业了才算工作经验的话)。。。不过我觉得在学校做的合作项目也应该算是工作经验吧,那样的话可就是一年多了(项目是 JAVA B/S的商业项目,如果算上ASP的就不知道有多早了)。。毕竟也是商业项目。。。虽然后来不了了之。。。主要是揽项目的那个哥们儿不在那个地方干了,直接给他当了毕业设计了。。。晕倒。。。

    还是趁现在在家。。老老实实的多学上会儿吧。。。。开始复习Linux的SHELL编程

    前天华为打电话来了。。。不过听意思好像是觉得我的工作经验太少。。。。0755的是深圳。

    关于Linux的SHELL编程,只是罗列要点了,看能记起来多少,以后再慢慢补充把。。。。

1、 关于声明:
    所有的脚本最开始的时候加上的声明,其实就是在第一个注释#的后边加上!SHELL_name。比如说#!/bin/bash
    还有就是最好要加上脚本的名称、内容、作者、日期、版本,反正就和写java一样。。不过没有所谓的生成Doc了。

2、 关于变量:
  2.1声明变量
    声明一个变量其实很简单:变量名字=值 就可以了(等号两边不能有空格)。
    主要要注意的是如果你的值没有加引号,那么你所有的空格“ ” 要写成“ ”(可能是TOM Blog的问题,这里有个斜杠有可能会显示不出来,就是回车上边的斜杠,就像JAVA或者是C语言中的换行符前边要加斜杠一样,空格前边也要加)。
    变量也可以使用变量名称=值 变量名称的方法来显示,比如MYPROGRAMPATH=$HOME/MyProgram就可以是/home/monicc/MyProgram
    在这里要注意的是如果你用的是单引号'的话,你写成'$HOME/MyProram',那么实际上你的变量是$HOME/MyProgram,实际上是没有这个目录的。。。肯定会出错,至于双引号则没有这个问题。
  2.2关于数组、数字、方法、的声明
    声明的变量其实应该是一个字符串,所以你如果:
    #!/bin/bash
    a=2
    b=3
    c=$a+$b
    echo $c
    那么你就会很郁闷的发现输出的c的值竟然是"2+3"。。。。成了字符串。。。如果你真的要对数字进行相加呢?
    只能用declare才行:
    #!/bin/bash
    declare -i a=2
    declare -i b=3
    declare -i c=$a+$b
    echo $c
    这样出来的结果才能是5
    要注意的是:declare的参数有这么几个:
    i定义整数integer(int)
    a定义数组array
    f定义方法(函数)function
    r定义为只读(具体有什么用处不太清楚,以后补上)
    x定义为通过环境输出变量(具体有什么用处不太清楚,以后补上)
  2.3读入变量内容
    这个其实很简单,在用read,这个在很多的时候都要用的。因为几乎任何的程序都是要求输入东西的。举个例子:比如说最简单的猜数字游戏。。。

3、 关于执行:
    只要用sh命令就可以,比如sh SHELL_Program_file_name;或者直接给加上一个x的权限让他编程可执行文件:chmod +x SHELL_Program_file_name,然后直接./SHELL_Program_file_name就可以了。

4、 得到参数
    这个其实是可以说Linux自定义的几个变量:$0、$1、$2、$3。。。$n
    其中$0代表着脚本名称,剩下的$n就分别代表着第n个参数。。。。
    还有就是$*是所有的参数

5、 几个比较重要的环境变量
    $HOME 用户的主目录,一般是/home/user_name
    $PATH 这个就不用说了吧。。。注意的是在Linux下PATH用:(冒号)来分隔,而不是分号(Windows下才是分号)
    $HOSTNAME 主机名称
    $LANG 顾名思义,语言和语言编码,要是安装Oracle中文实在老是出现"口口"的话,就把LANG改成en_US.UTF-8试试。。。。。
    $PS1 提示符的样式
    $PWD 当前目录
    $USER 用户账号
    $BASH BASH的程序路径
6、 逻辑判断
    其实就是在if判断中的参数:
    -f  是否为一个文件
    -d  是否是一个目录
    -e  是否存在

    -r  是否可读
    -w  是否可写
    -x  是否可执行
    -s  是否为非空文件

    -nt 两个文件比较,前一个是否比后一个新
    -ot 两个文件比较,前一个是否比后一个旧
    -ef 两个文件比较,是否相同,或者是否链接文件

    =   等于
    !=  不等于
    <   小于
    >   大于
    -eq 等于
    -ne 不等于
    -lt 小于
    -gt 大于
    -ge 大于等于
    -le 小于等于
    -z  是否为空字符串
    -n  是否为非空字符串

    &&  条件并
    ||  条件或
    !   条件非

7、 条件判断
  7.1 if语句
    if [ 逻辑判断 ];then
        语句
    elif [ 逻辑判断 ];then
        语句
    else
        语句
    fi
    这个要注意的是:如果在逻辑判断中的变量是用read读取的,那么要是光写成$变量=“值”的样子是不行的,当在read的时候直接输入回车,那么逻辑判断就会变成 ="值",这个是会出错的 所以在逻辑判断中变量要加上引号。
  7.2 case语句
    case 变量(String类型的)in
        结果)#<--这里只有后半个括号
            语句;;#<--这里要有两个分号
        结果)
            语句;;
        默认处理的语句;;#<--这个双分号可以省略不写。
    esac
    同样这里的变量最好也要加上引号。
    还有,可以用或“|”来合并结果,也可以用"*"来匹配模糊结果(如Y*或者是N*),或者用[Yy] | [Yy][Ee][Ss]来匹配,这样的匹配可以限制允许出现的字符。

8、 循环判断
  8.1 for循环
    for((条件一; 条件二; 条件三))#<--这里是两层的括号。和C语言中的for循环同理
    do
        语句
    done
  8.2 for循环(二)
    for 值 in 变量(变量值用空格分离,或者可以直接写成值1 值2 值3...的形式)#<--和for each循环同理
    do
        语句
    done
  8.3 until循环
    until [ 逻辑判断 ]
    do
        语句
    done
    #直到逻辑判断为真时停止循环。
  8.4 while循环
    while [ 逻辑判断 ]
    do
        语句
    done
    #当逻辑判断为真时循环。
9、函数(方法)
先来一个最简单的:
函数名称(){
    语句
}
调用的时候直接用函数名称就可以了。
默认所有的函数都是有返回值的,return 值,如果不写的话,就以最后一条语句的值来算。。。(好像很难懂得样子。。。)
 
10、break continue
基本上学过C语言的人都知道.....

11、 “.”
在SHELL脚本中执行命令
比如: . ./runProgram

12、eval
意思就是得到参数的值,好像有些笼统了:
a=10
x=a
b='$'$x
eval c='$'$x
echo "b=$b"
echo "c=$c"
运行以后:
b=$a
c=10

13、exit
退出码,其中0表示正常,1~125表示各种各样的错误。。。

14、printf
和C语言的使用方法一样,等同于echo -n ""(这个可能看SHELL的不同还不一样,不过bash都使用这个-n的)

15、trap
当得到信号的时候怎么办,具体的信号可以用trap -l来看。
使用方法:
trap command signal_name
比较常用的:
HUB   挂起,比如说断线
INT   中断,比如说Ctrl+C
QUIT  退出,比如说Ctrl+
ABRT  终止,执行错误等重大错误
ALRM  报警,超时
TERM  系统终止,比如说root要关机了

16、脚本调试
sh -nvx
其中:
-n  检查语法错误,不执行
-v  执行前先显示代码
-x  执行后显示用到的代码

17、图形化界面
其实就是dialog,基本上就是dialog --XXX parameters...的形式(两个横杠阿!)
其中,通用的有--clear(清屏)、--backtitle “parameter”(背景标题)、--title “title_name”(标题)
其他的有:(参数全部使用空格分离)
msgbox
参数:内容,widght,height
对话框,相当于Windows的警告窗口,只有一个OK按钮

infobox
参数:内容,widght,height
信息显示,相当于软件的关于(about),在图形环境下几乎不显示,只能用sleep强制的显示上一段时间了

textbox
参数:file,widght,height
先当于一个不能编辑的记事本或VIM,只能看

checklist
参数:内容,widght,height,(键,值,[ON]|[OFF]默认是否选择)对应的选项
显示的选项数复选框

radiolist
参数:内容,widght,height,显示的选项数,(键,值,[ON]|[OFF]默认是否选择)对应的选项
单选框

yesno
参数:内容,widght,height  是否的选择框

menu
参数:内容,widght,height,显示的菜单数,(键,值)对应的菜单
主菜单

inputbox
参数:内容,widght,height,显示的菜单数,输入框内的默认值
输入框

 

具体的我放在一个例子里了:(还有个猜数字没写,不过本来就是自己瞎乎写的。。。。)

  • TestDialog4.zip (1.3 KB)
  • 描述: LINUX下SHELL(bash)图形界面编程的例子,希望大家多捧场
  • 下载次数: 5
1
2
分享到:
评论

相关推荐

    西南科大+Linux实验报告+shell程序开发

    任务一:掌握Shell编程的基本特点。 任务二:掌握shell脚本的编写 任务三:应用Shell程序设计方法,能分析Shell程序结构;掌握Shell程序开发环境的使用;能根据Shell程序功能、安全管理方面的需求,设计Shell程序...

    跟老男孩学Linux运维:Shell编程实战

    《跟老男孩学Linux运维:Shell编程实战》第四部分为第14章~第16章,着重讲解Shell脚本开发规范与编码习惯、Shell脚本的调试知识和技巧、Shell脚本开发环境的配置调整和优化等。《跟老男孩学Linux运维:Shell编程实战...

    跟老男孩学Linux运维:Shell编程实战 part3

    涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。第二部分为第5章~第8章,着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等...

    深入浅出嵌入式Linux应用程序开发MP4视频.zip

    深入浅出嵌入式Linux应用程序开发MP4视频. 嵌入式系统概述。 Linux系统体验。 shell编程基础-变量详解。 shell编程基础-语句详解。 shell编程基础-函数详解。 shell编程实例分析。 linux应用程序设计基础-GCC编译器...

    用Linux/UNIX Shell编程语言设计系统监控程序.pdf

    用Linux/UNIX Shell编程语言设计系统监控程序.pdf

    Linux快速入门以及shell编程基础知识

    本文将在30分钟内让你快速理解Linux系统的基础知识,并学会编写简单的shell脚本程序。 首先,Linux系统的目录结构与Windows系统不同,它采用“根目录”“home目录”“等级目录”等组织方式。学习cd,ls,mkdir等命令可以...

    跟老男孩学Linux运维:Shell编程实战.part2

    涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。第二部分为第5章~第8章,着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等...

    linux C编程实战

     1.5 Linux下程序的开发环境和开发过程   1.6 习题   第2章 C编程基础、Vi和Emacs编辑器   2.1 C程序的结构   2.2 C语言的基本数据类型   2.2.1 整型   2.2.2 浮点型   2.2.3 字符型   2.3...

    跟老男孩学Linux运维:Shell编程实战 part5

    涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。第二部分为第5章~第8章,着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等...

    跟老男孩学Linux运维:Shell编程实战.part1

    涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。第二部分为第5章~第8章,着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等...

    跟老男孩学Linux运维:Shell编程实战 part1

    涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。第二部分为第5章~第8章,着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等...

    跟老男孩学Linux运维:Shell编程实战 part4

    涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。第二部分为第5章~第8章,着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等...

    跟老男孩学Linux运维:Shell编程实战 part2

    涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。第二部分为第5章~第8章,着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等...

    Linux系统编程教程

    二、服务器开发:需要学习Linux 程序设计和Linux 网络编程。 三、嵌入式Linux 应用程序:需要学习C 语言和基本的Linux 常识。 四、嵌入式Linux 驱动:除了需要学习“嵌入式Linux 应用程序”的知识以外,还需要了 ...

    Linux C程序设计王者归来Part1

     内容全面:涵盖Linux下C语言基础、开发工具、Linux系统机制和Shell编程等  讲解详细:对每个知识点都从原理、作用、语法、示例和技巧等多角度进行分析  贴近实际:对开发中经常用到的Linux进程操作、文件操作和...

Global site tag (gtag.js) - Google Analytics