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,显示的菜单数,输入框内的默认值
输入框

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值