论坛风格切换切换到宽版
  • 1802阅读
  • 9回复

[问题求助][CentOS] Shell编程,真的能编写出一个软件出来? [复制链接]

上一主题 下一主题
离线skyj2005.
 
发帖
1850
C币
-61380
威望
285
贡献值
1
银元
-1
铜钱
3985
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
Shell编程,真的能编写出.一个软件出来?服务器

就像Windows的C#编程.语言一样?

它有图形界面吗?


http://upload.bbs.csuboy.com/Mon_1004/126_7149_841324b0ca21639.gif[/img] http://upload.bbs.csuboy.com/Mon_1004/126_7149_841324b0ca21639.gif[/img] http://upload.bbs.csuboy.com/Mon_1004/126_7149_841324b0ca21639.gif[/img] http://upload.bbs.csuboy.com/Mon_1004/126_7149_841324b0ca21639.gif[/img]http://upload.bbs.csuboy.com/Mon_1004/126_7149_841324b0ca21639.gif[/img].

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线海龟的.
发帖
2199
C币
-235349
威望
396
贡献值
6
银元
4
铜钱
4851
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-14
Re:[CentOS]
利用dialog可以弄出简单的界面


不同的语言有不同“专攻”啊

离线wcl2222.
发帖
2014
C币
-235377
威望
382
贡献值
1
银元
-2
铜钱
4547
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-14
Re:[CentOS]
知道git吗?
全是脚本

离线5136456.
发帖
2120
C币
-235562
威望
415
贡献值
1
银元
-1
铜钱
4813
人人网人气币
0
只看该作者 地板  发表于: 2010-04-14
Re:[CentOS]
git好像是版本控制的软件吧啊?用shell写的?

离线期他待~~.
发帖
1934
C币
-235561
威望
376
贡献值
1
银元
-2
铜钱
4359
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-14
Re:[CentOS]


QUOTE:原帖由 emmoblin 于 2009-4-29 13:43 发表
知道git吗?
全是脚本



呵呵,我可真不知道。连Shell我都不太清楚,是什么东西。

它看上去,不是专业的编程语言。和Java和C#,无法比。



离线joo.
发帖
1980
C币
-235833
威望
395
贡献值
1
银元
-1
铜钱
4431
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-14
Re:[CentOS]
它看上去,不是专业的编程语言。
不专业的人却能干很专业的事!

发帖
2067
C币
-235797
威望
384
贡献值
1
银元
-2
铜钱
4645
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-14
Re:[CentOS]
http://www.ibm.com/developerworks/cn/linux/shell/index.html

Shell也叫做命令行界面,它是Unix操作系统下传统的用户和计算机的交互界面。用户直接输入命令来执行各种各样的任务。当然微软的Windows操作系统也提供了这样的功能,它们是Windows 9X下的command.com,和基于Windows NT的各种系统下的cmd.exe。

普通意义上的shell就是可以接受用户输入命令的程序。它之所以被称作shell是因为它隐藏了操作系统低层的细节。同样的Unix下的图形用户界面GNOME和KDE,有时也被叫做虚拟shell或者图形shell。

Unix操作系统下的shell既是用户交互的界面,也是控制系统的脚本语言。当然在这点也有别于Windows下的命令行,虽然也提供了很简单的控制语句。在Windows操作系统下,可能有些用户从来都不会直接的使用shell,然而在Unix系列操作系统下,shell仍然是控制系统启动,X Window启动,和很多其他实用工具的脚本解释程序。




    Sppence Murray 是 Linux 开发高手之一,同时长期以来他一直是 UNIX 的坚定支持者。本文介绍的是 Murray 和他在 Codemonks Consulting 的同事在日常的 Linux 开发以及应用服务工作中用到的基本技术: shell 脚本,相信 Linux 的开发人员都会受益于这项有用而且通用的技术。

Spence Murray 是 Codemonks Consulting 的创始人之一,自从 20 世纪 80 年代最早在 SunOS 上编写代码到现在,一直致力于 UNIX/Linux 的开发。从那时起,他曾在 IBM 公司的 AIX、SGI 公司的 Irix 工作,长时间地编写跨平台的 UNIX 代码,包括 HP/UX,Irix,Solaris/SunOS,SCO UNIX,各种 BSD,MacOS X,当然,还有 Linux。从图形/视频设备驱动程序到 UI 代码,他什么工作都做过。Murray 编写的跨平台代码包括 X Window System Xserver 代码,以及作为 Netscape Navigator 一部分的核心浏览器代码。

Murray 最经常使用的 Linux 工具是 vi、bash 和 Emacs。“不论我是在写 C、C++、Java、shell 脚本,还是 HTML,大部分的时间我都在这些工具中来回切换”,他说。

Linux 秘密武器

Murray 认为,对一个 Linux 开发人员来说,shell 是一个强大的软件开发工具,无论怎么评价都不过分。“在我做的每一项工作中都要用到 shell 脚本,不论是快速地阅读和修改普通文本还是编写代码”,他说。“它轻便而快捷,它短小的命令使得来回移动代码称为一个迅速而没有痛苦的过程。作为一名编辑,它很快就会成为第二本能”。

对 Murray 来说,Emacs 作为一个开发工具出现的晚了一些。“在 90 年代早期,我尝试使用 Emacs 作为一个 IDE,并很快就转换门厅。Emacs 非常强大,在那些日子里,我会一直开着一个 Emacs 窗口,经常打开几十个源文件,每个都有我编辑的上下文、使用 gdb 的调试会话以及在不同的源目录下运行的 bash 脚本。有很多关于 Emacs 的资料,可以说,这是个可怕的工具...再者,您可以在任何您想要花时间去做开发的系统上运行 Emacs。

自从 20 世纪 80 年代中期第一次使用 SunOS支持的 vi 这个简洁的环境以来,Emacs 编辑器已经成为了 Murray 的标准工具。"它在各种流派的 UNIX 上都可以使用,这是我在致力于跨平台的开发工作时选择它的主要原因之一”,他说。




        回页首


Linux 开发人员:了解您的 shell

Murray 要求您要了解您的 shell。“Bash、tcsh、csh――shell 是您最基本的软件开发工具”,他强调说。“它可以做许多了不起的事情。所有的工作都要依赖于它……和它的强大功能”。作为说明通用的 shell 脚本功能强大的例子,在 参考资料部分中有一个可以下载的文件,其中有一组脚本,用于获得 Red Hat 发行的更新 RPM 软件包并将它们合并到原来的软件包和定制的软件包。下载文件并解压缩后,您可以在 /developerworks/rpm_update_scripts 目录下找到脚本。最终结果是一个包括所有软件包最新版本的目录和一个用于网络安装的升级的 hdlist 文件。

下面的代码片段实现的是对 Red Hat RPM 软件包的自动更新,以创建一个使用最新的 RPM 的可以安装的版本。这对任何一个维护公共 Linux 服务器的人来说是一个基本的步骤。就我们而言,我们通常是维护许多公共 Linux 服务器上的大量网络服务。下面是可以自动完成更新最新的安全和功能的过程的部分脚本。

下面的脚本样例证明了普通的 shell 编程技术可以广泛应用于各种系统配置和程序设计应用。脚本使用的是 bourne shell,它是在不同的 UNIX 系统中最为常见的 shell。这样就可以保证这些非常轻便的代码可以稍加修改或者不加修改地在不同的 UNIX 系统上使用。修改 Red Hat 软件包的规范以应用于其它 Linux 发行版本是很容易的。

freshen.sh 使用指定的 RPM ftp 更新站点上的 RPM 软件包来更新原有的 RPM 列表。执行过滤器来替换更新 RPM 软件包。最后,长长的发行列表根据从更新镜像站点上得到的新 RPM 软件包完成更新。

清单 1. fresh.sh

#!/bin/sh
rh_ver=$1
rh_path=$2
update_dir=${rh_path}/RH${rh_ver}-updates
custom_dir=${rh_path}/RH${rh_ver}-custom
install_dir=${rh_path}/RH${rh_ver}-install
# Sanity check for the original directory.
# Create update and install directories if they don't exist
[ -d ${update_dir} ] || mkdir ${update_dir}
[ -d ${install_dir}/RedHat/RPMS ] || mkdir -p ${install_dir}/RedHat/RPMS
# Get latest updates from fresh rpms FTP site
./get_update.sh ${rh_ver} ${update_dir}
# Create/update hardlinks from update, and custom directories
# to the install directory. We assume that original RPMS are already
# hardlinked to the install directory, so all we need to do is filter
# out any replaced by updated packages.
./do-links.sh ${update_dir} ${install_dir}/RedHat/RPMS
[ -d ${custom_dir} ] && ./do-links.sh ${custom_dir}
${install_dir}/RedHat/RPMS
# Filter out all but the latest version of everything.
./filter-rpms.pl $install_dir/RedHat/RPMS
# Rebuild the hard disk lists
/usr/lib/anaconda-runtime/genhdlist ${install_dir}


freshen.sh 调用 do-links.sh 和 get_update.sh ,分别去设置 RPM 发行版本的源、宿(省略了源 RPM 软件包;硬链接用来设置目的 RPM)和检索更新。

清单 2. do-links.sh

#!/bin/sh
src=$1
dest=$2
#for file in $src/*; do
for file in `find $src -name *.rpm -a ! -name *.src.rpm -print`; do
base=`basename $file;`
if test ! -f $dest/$base; then
echo "Linking $file";
ln $file $dest
else
echo "EXISTS: $file";
fi
done



清单 3. get_update.sh

#!/bin/sh
rh_ver=$1
dest=$2
echo "Retrieving updates for version ${rh_ver} to $dest"
lftp << EOF
open ftp.freshrpms.net <ftp://ftp.freshrpms.net>  <ftp://ftp.freshrpms.net>
<ftp://ftp.freshrpms.net>
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i386 $dest/i386
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i486 $dest/i486
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i586 $dest/i568
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i686 $dest/i686
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/SRPMS $dest/SRPMS
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/noarch $dest/noarch






        回页首


Java 和 Linux

在 Codemonks,相当多的开发工作是在 Linux 上用 Java 完成。这两个工具的组合为创建商业级质量的 Web 应用提供了一个平台,Murray 说。“在做这些项目的过程中,我们发现我们要总体上了解客户已有的应用代码”,他回忆说。locks.c (在下载得到的压缩文件中的 /developerworks/locks 目录下;参阅 参考资料) 是一个代码片段,实现的是用于 Java Virtual Machine Profiler Interface (JVMPI; 参考资料中有关于 JVMPI 详细信息的链接) 的读/写锁以及大量的调试代码。




        回页首


Linux 开发人员的代表

“在情况允许的时候,不要写特定于系统的代码”,Murray 说,而是克服困难去“写好的跨平台的代码”。受雇的 Murray 坚持认为他最大的资本永远是“写具有商业品质的代码,构建和提供网络服务,定制 OS 或内核,而且完全基于可靠的开放源代码的平台”。

下面是一个代码片段,来自于一个跨平台的定制的 IMAP 服务器,这个服务器由 Linux 和 MacOS X 的开发人员共同开发。代码实现的是一个用来处理字符串的简单的增长缓存。这样避免了缓存溢出的问题(不要忘记那些安全漏洞),而不必要您每次做某些事情的时候重新分配空间。它是通过维护一个简单的可变长的缓存来实现的,这个缓存可以写满和清空。这个缓存已经被用于一个实验用的 IMAP 服务器,这个服务器是由一个团队紧张工作了一周完成的。

除了一个简单的字符串缓冲区的实现之外,这段代码还实现了一个可变大小的字符串数组。它完成的是一个简单的接口,当您写完一个字符串以后,您可以标记它然后继续写下一个。此外,这样会节约空间分配,并且将比较乱的代码组织到一起。

完整的 IMAP 服务器的代码将在今年某个时间发布。

清单 4. 定制的 IMAP 服务器一部分


#ifndef HOED_BUF_H
#define HOED_BUF_H
typedef struct {
char *str;
int size;
int length;
int str_start;
int max_size;
int n_strings;
int size_strings;
int *str_posn;
char **str_set;
} hoed_buf_t;
#if     __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
#define PRINTF(f, a)    __attribute__((format (printf, f, a)))
#else
#define PRINTF(f,a)
#endif
extern hoed_buf_t *hoed_buf_alloc(int init_size, int max_size);
extern void hoed_buf_free(hoed_buf_t *);
extern void hoed_buf_reset(hoed_buf_t *);
extern void hoed_buf_new_string(hoed_buf_t *);
extern char **hoed_buf_get_set(hoed_buf_t *, int *n_string);
extern char *hoed_buf_put_char(hoed_buf_t *, char toadd);
extern char *hoed_buf_sprintf(hoed_buf_t *, const char *format,...)
   PRINTF(2,3);
extern char *hoed_buf_strcat(hoed_buf_t *, const char *append);
extern char *hoed_buf_cat_sprintf(hoed_buf_t *, const char *format, ...)
   PRINTF(2,3);
#endif /* HOED_BUF_H */






        回页首


称为杀手级的 Linux 应用程序

对 Murray 来说,有两个杀手级的 Linux 应用程序:Emacs 和 Netscape Navigator。“Emacs 或许是给人印象最深而且广为应用的基于 Linux 的应用程序”,他说。“另一个是 Netscape Navigator。有一次,我们要支持20多种 UNIX,我在 Linux 上完成了所有的工作”。

他继续说,“有趣的是,基于 Linux 的应用程序可能运行于许多不同风格的 UNIX 系统上,甚至安装了 Cygwin 的 Windows 系统。”

离线i65u.
发帖
2099
C币
-313896
威望
378
贡献值
4
银元
-3
铜钱
4649
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-14
Re:[CentOS]
见过一些游戏的安装文件是.sh格式的,忘了是fps还是战略游戏的了,有图形界面

离线samk750.
发帖
2038
C币
-60693
威望
392
贡献值
1
银元
-3
铜钱
4684
人人网人气币
0
只看该作者 8楼 发表于: 2010-04-14
Re:[CentOS]
各有各的优点

离线fu20.
发帖
2018
C币
-199009
威望
372
贡献值
1
银元
-2
铜钱
4553
人人网人气币
0
只看该作者 9楼 发表于: 2010-04-14
Re:[CentOS]
shell也可以实现比较复杂的应用,对一些日志的分析就可以通过shell完成
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个