linux中国_ 发布的文章

以前我总想知道如何为我的Bash脚本创建命令行参数。经过搜索,我发现了2个函数可以处理这个问题,getopt 函数和 getopts 函数。我无意争论哪一个函数更好的。getopts 是一个shell内建命令,而且似乎比 getopt 更容易实现这个功能,所以在这篇文章里我准备讲讲getopts。

bash getopts

开始的时候,我只试着处理传递给脚本的命令行参数。最后,我添加了另外一些有用的功能函数,使得这个脚本可以成为其他任何交互式脚本处理命令行的开始模板。我还添加了一个纯文本格式的帮助函数,让脚本更加容易阅读。

与其来一长段文字解释 getopts 在bash中是如何工作的,我认为不如直接来一个能工作的脚本更让人觉得轻松一些。

#!/bin/bash

######################################################################
#This is an example of using getopts in Bash. It also contains some
#other bits of code I find useful.
#Author: Linerd
#Website: http://tuxtweaks.com/
#Copyright 2014
#License: Creative Commons Attribution-ShareAlike 4.0
#http://creativecommons.org/licenses/by-sa/4.0/legalcode
######################################################################

#Set Script Name variable
SCRIPT=`basename ${BASH_SOURCE[0]}`

#Initialize variables to default values.
OPT_A=A
OPT_B=B
OPT_C=C
OPT_D=D

#Set fonts for Help.[译注: 这里tput用来更改终端文本属性,比如加粗,高亮等]
NORM=`tput sgr0`
BOLD=`tput bold`
REV=`tput smso`

#Help function
function HELP {
  echo -e \\n"Help documentation for ${BOLD}${SCRIPT}.${NORM}"\\n
  echo -e "${REV}Basic usage:${NORM} ${BOLD}$SCRIPT file.ext${NORM}"\\n
  echo "Command line switches are optional. The following switches are recognized."
  echo "${REV}-a${NORM}  --Sets the value for option ${BOLD}a${NORM}. Default is ${BOLD}A${NORM}."
  echo "${REV}-b${NORM}  --Sets the value for option ${BOLD}b${NORM}. Default is ${BOLD}B${NORM}."
  echo "${REV}-c${NORM}  --Sets the value for option ${BOLD}c${NORM}. Default is ${BOLD}C${NORM}."
  echo "${REV}-d${NORM}  --Sets the value for option ${BOLD}d${NORM}. Default is ${BOLD}D${NORM}."
  echo -e "${REV}-h${NORM}  --Displays this help message. No further functions are performed."\\n
  echo -e "Example: ${BOLD}$SCRIPT -a foo -b man -c chu -d bar file.ext${NORM}"\\n
  exit 1
}

#Check the number of arguments. If none are passed, print help and exit.
NUMARGS=$#
echo -e \\n"Number of arguments: $NUMARGS"
if [ $NUMARGS -eq 0 ]; then
  HELP
fi

### Start getopts code ###

#Parse command line flags
#如果选项需要后跟参数,在选项后面加":"
#注意"-h"选项后面没有":",因为他不需要参数。选项字符串最开始的":"是用来去掉来自getopts本身的报错的,同时获取不能识别的选项。(译注:如果选项字符串不以":"开头,发生错误(非法的选项或者缺少参数)时,getopts会向错误输出打印错误信息;如果以":"开头,则不会打印[在man中叫slient error reporting],同时将出错的选项赋给OPTARG变量)

while getopts :a:b:c:d:h FLAG; do
  case $FLAG in
    a)  #set option "a"
      OPT_A=$OPTARG
      echo "-a used: $OPTARG"
      echo "OPT_A = $OPT_A"
      ;;
    b)  #set option "b"
      OPT_B=$OPTARG
      echo "-b used: $OPTARG"
      echo "OPT_B = $OPT_B"
      ;;
    c)  #set option "c"
      OPT_C=$OPTARG
      echo "-c used: $OPTARG"
      echo "OPT_C = $OPT_C"
      ;;
    d)  #set option "d"
      OPT_D=$OPTARG
      echo "-d used: $OPTARG"
      echo "OPT_D = $OPT_D"
      ;;
    h)  #show help
      HELP
      ;;
    \?) #unrecognized option - show help
      echo -e \\n"Option -${BOLD}$OPTARG${NORM} not allowed."
      HELP
      #在这里如果你不想打印完整的帮助信息,只想显示简单的错误信息,去掉上面的两行,同时使用下面的两行。
      #echo -e "Use ${BOLD}$SCRIPT -h${NORM} to see the help documentation."\\n
      #exit 2
      ;;
  esac
done

shift $((OPTIND-1))  #This tells getopts to move on to the next argument.

### End getopts code ###


### Main loop to process files ###

#这里你可以用你的脚本处理逻辑来替代。这个例子只是在终端中打印文件的文件名和后缀名。你可以把任意其他的文件处理任务放到这个while-do循环中。   

while [ $# -ne 0 ]; do
  FILE=$1
  TEMPFILE=`basename $FILE`
  #TEMPFILE="${FILE##*/}"  #另外一种获取不带后缀的文件名的方法。
  FILE_BASE=`echo "${TEMPFILE%.*}"`  #file without extension
  FILE_EXT="${TEMPFILE##*.}"  #file extension


  echo -e \\n"Input file is: $FILE"
  echo "File withouth extension is: $FILE_BASE"
  echo -e "File extension is: $FILE_EXT"\\n
  shift  #Move on to next input file.
done

### End main loop ###

exit 0

将上面的代码复制到你的文本编辑器里,然后保存到你的可执行路径下。我将这个脚本命名为 options 并保存到 /home/linerd/bin 路径下。保存之后记得给你的脚本添加可执行权限。

chmod +x ~/bin/options

现在脚本已经可以运行了。试试用 -h 参数来打印帮助信息吧。

options -h

遇到不支持的选项,脚本同样可以给出提示,并打印帮助信息。

options -z

最后,getopts可以以任意的顺序处理你给的命令行参数。唯一的限制是你要处理的文件必须放在所有参数的最后。

options -d bar -c chu -b man -a foo example1.txt example2.txt

现在你可以从这些例子里看到如何通过命令行参数给脚本里的变量赋值。这个脚本里除了getopts还有很多其他的东西,但是我认为这些就足以成为一个新脚本的开头模板了。如果你有兴趣更深入地学习bash的getopts,你可以找找深埋在man page的“Builtins”这一节里的文档,也可以从 Bash Reference Manual 找到信息。

接下来呢?

你会用getops来干什么呢?在评论里告诉我吧。


via: http://tuxtweaks.com/2014/05/bash-getopts/

译者: CNprober <[email protected], QQ619913541> 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

在最近的Distrowatch杂志上,Jesse Smith尝试了一下RHEL 7桌面版本。在安装上,“从RHEL安装介质启动到一个图形化的系统安装界面,RHEL用了和最近发布的Fedora一样的新的Anaconda安装方式。就我个人来说新的安装方式是一种倒退”他说道。这没啥大不了的,他猜测在桌面版本就是这样的吧。Smith说他希望有一种图形化的软件包管理工具,因为用户只能在命令行下使用YUM源,只能使用标准的默认库。之后,GNOME shell登录崩溃了,只能使用KDE登录。虽然有些困惑但是他非常喜欢新的防火墙配置工具。请看他的详细报告

ZDNet.com上,Jamie Watson对新发布的PCLinuxOS 2014.05发表了自己的看法。他说道:

这是个有趣的看法,你可能从它的名字当中想到它包含了很多软件,补丁,驱动在非标准的分支中。最有趣的一点是,基于活动聚焦的虚拟桌面配置。这种趋势使PCLinuxOS使用起来既有趣又简单,提供了以下的桌面环境,个性化的图标:

互联网:浏览器,邮件,聊天工具

工作:office、kile、scribus

娱乐:游戏

多媒体:音乐,视频的编辑和创作

图形和图像:浏览,编辑和创作

管理:系统管理任务

“PCLinuxOS始终使用原来的安装方式,它来源于Mandriva/Mandrake安装方式”Watson提到。它还带来了新的内核,最新的软件,和多样化互动的界面。他总结道:“这个新发布的PcLinuxOS版本很不错”。另外Watson在几周前也测试过了Ubuntu、Debian和LMDE。


via: http://ostatic.com/blog/pros-secrets-and-red-hat-7-and-pclinuxos-2014-05-reviews

译者:jiajia9linuxer 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

好吧,Linux博客圈这里这周相对比较平静,给网民们一个拖了很久的机会集体喘口气吧,去享受一下龙舌兰、燕尾服、鸡尾酒带来的欢快吧,然后评估一下过去几周来发生的和自由开放软件相关的事件吧。

“你是否曾经在听一张专辑的时候想过‘伙计,这听起来不错,但是我希望它能经常从用户空间过渡到内核空间去!’”粉丝们在Facebook上写道,“我们会全力支持你的。我们的专辑现在完全可以作为一个可加载的Linux内核模块来播放。”

Linux女孩曾经认为她自己已经完全进入Linux世界了,但是她现在却意识到她的想法是错误的。谢谢你们,粉丝们,是你们让生活一直这么有趣!

‘命令行秘诀’

说到有趣,没什么比围坐在吧台前谈论行业内的事情来度过平静的一周更带劲了,而上周搞了一次。Linux博客圈内的生活很惬意。

座谈会内容是《Linux之声》——那本炫目出世的新杂志,读者也许记得它是去年年底发布的——而谈话的主题恰恰就是命令行秘诀

Linux女孩太激动了。

‘它打算渲染大多数网页’

“有很多使用命令行的真正的好理由,”《Linux之声》的策划者写道,“它是让你和计算机进行交互的强大而简明的方法“

“然而,我想花点时间来看看它里头一些更为晦涩的用法(有人会说毫无意义,不值得去做了)。“他们补充说。

杂志首先列出的是elinks网页浏览器:“它可能看起来没有它的竞争对手那样光彩照人,但它的目标是能够渲染大多数网页。”他们解释道,“它也有着极客时尚,当你需要快速检查你是否能从只能通过SSH访问的计算机上去访问网页时,它就会派上用场了。“

之后谈到的包含了从维基百科上查阅一些定义等其它一些实用的小建议。

'对维护很重要'

“命令行的小技巧很有趣,真的很有趣。”比如,Google+博主亚历桑德鲁:埃伯索尔满怀热情地说,“但是他们忘了cowsay,它可以用来在黑漆漆的终端里博你一笑。“

”命令行对于维护很重要。“他补充说,”大家可以使用bash脚本来自动化,只需按几个快捷键(或者只要一个就行)来完成复杂的任务。”

其它命令行秘诀,埃伯索尔会把它们放进原来的列表的包括sl(蒸汽机车),以及这些这些奇怪的点子

* % cat "food in cans"
cat: can't open food in cans
* % nice man woman
No manual entry for woman.
* % [Where is Jimmy Hoffa?
Missing ].
* % make love
Make: Don't know how to make love. Stop.
* % man: why did you get a divorce?
man:: Too many arguments.

'最珍贵的精华'

“命令行秘诀?根本没这玩意。”博主罗伯特:伯格森告诉Linux女孩道,”失望了吧,新手?那就猛敲‘help’吧。还想要点提示?随便‘man’个什么吧。想更多来点不同?敲‘ls /bin /sbin /usr/bin /usr/sbin | less’,随便捡几个宝贝命令出来,整晚地‘man’去吧。我已经干那活超过十年了,到现在还玩得不亦乐乎。”

伯格森记不得多久以前他发现了‘ssh’,但是“它是自由/开源软件世界中最璀璨的宝石了。“他说。

”ssh的强大力量在于,你可以在一台计算机上输入命令获得快乐,你更可以在100台计算机上干同样的事情来获得100倍的快乐。“他补充道,”当然,要输入100次命令可不是闹着玩的。所以,学习一下通过ssh安全地无密码登陆,可以让ssh的远程登陆透明化。“

'带着尊重来用吧'

当然,”就像干任何快乐的事一样,有人会沉迷于搞破坏。“伯格森警告道,”作为root用户,你可以输入命令来删除所有的东西,或者把这一切搞乱。“

”这是核弹按钮,就像全球领袖处理世界事务一样,在按下那个键之前一定要三思而后行,评估干这事所产生的结果,带着尊重和高尚的动机来使用它。“他补充道。

”我曾经删除了一个文件系统,因为我的大拇指在输入一个命令时不小心蹭到了空格键。“伯格森总结道,”坦白地说,这种蠢事我只干过一次。“

'很强大'

Google+博主贡萨洛:贝拉斯科C不那么热情。

“即使GUI工具更易用,在*nix领域,命令行仍然很强大。“他告诉Linux女孩,”甚至一些高级MacOS用户也用它们。”

对于贡萨洛:贝拉斯科C他自己而言,“我想要掌握的唯一一些命令是进程控制和杀死命令,想要使用ctrl+alt+退格键,因为我可以用来处理给我造成麻烦的那个进程,我还想要掌握tar.gz文件的管理——那玩意到现在还让我头痛。“他说。

'你正在做错事'

最后一点,但并非不重要,SoylentNews博主hairyfeet有一个完全不同的观点。

“我只想谈一件事情来充实一下命令行界面这个报道:如果你不干IT,而且做着一些重复的事情,而这些事情只是很简单、很原始地去记录一些有用的事情,但你还在用命令行,那么‘你在走一条不归路’“hairyfeet告诉Linux女孩,”命令行界面没什么神奇——它只是1970年代以来的一个图形化界面!“

今天,有很多“有用的图形化界面,这要多亏了CPU速度的提升和内存的增加,而不是一美元店里的廉价手表——我们甚至有IDE和脚本语言,大大超过70年代那些古董,可以在广域网或者局域网上工作,并与操作系统最底层交互,一切都在变得更易用,这多亏了智能感应和自动完成这样的技术。“他解释说,”所以上天作证,如果你不是那3%的系统管理员,工作在以字节计数的世界里,你会把那一堆垃圾从陈年旧帐中翻出来?

这是Hairyfeet的最佳命令行建议?“不要——被21世纪那些不切实际的想法所左右,学学怎样真正来使用语言和工具吧。“他总结道,”让命令行成为泡影,把软盘都扔进历史的垃圾桶吧。“

本文作者Katherine Noyes总是尽忠职守扮演好她的Linux女孩,那件斗篷她从2007穿到现在了。作为一个白天举止温和的女记者,她晚上像逛夜店一样,为了搜寻最新的小道消息,在Linux博客圈上灌水。你也能在 TwitterGoogle+上找到她。

via: http://www.linuxinsider.com/story/80437.html?rss=1

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Canonical——Ubuntu Linux背后的公司,其任职已久的社区经理将离职。Jono Bacon,一直是 Ubuntu 业界最熟悉的面孔之一,他将在XPRIZE基金会任新职。

Bacon于2006年加入Canonical,从其博客可知他是在收到XPRIZE的录用通知后决定离开Canonical的,XPRIZE自称为“创新引擎”和“造福人类的催化剂”。他将会在XPRIZE就任社区主管,施展他过去八年中在帮助协调Ubuntu社区方面所获得的能力。

虽然Bacon在Canonical不是直接负责商业或者发展方面,但是他的离开对于Ubuntu和开源界来说都是一件大事儿,在Ubuntu和开源界实际社区参与比行政头衔更重要。与Ubuntu的创始人和Canonical的前CEO Mark Shuttleworth一起,Bacon是早期Ubuntu生态系统项目的领军人物之一。

Bacon可以说在塑造Ubuntu的很多方面比Jane Silber更有影响力。Jane Silber自2010年一直是Canonical的CEO,但是他在公共场合的出面一般是很少的。

Bacon带领的团队包括Daniel Holbach,David Planella,Michael Hall,Nicholas Skaggs和Alan Pope。Bacon说,他们将会接手他社区领袖的工作。然而,尚不清楚的是Canonical是否会填补他留的社区经理职位。

也许Canonical不会。在很多方面,维持一个社区领袖与开源精神格格不入,开源精神往往赞扬的是分散的、用户主导的社区组织。一些Ubuntu的粉丝可能会因Bacon离职的新闻而感到恐慌。

不过,Bacon帮助指导过Ubuntu社区度过一系列的危机——从Canonical将Ubuntu软件中心设计为一个商店的失败尝试,到与Fedora群体的摩擦,到关于将Amazon.com搜索特性植入到新的Ubuntu的争议。他在Ubuntu的生态系统上留下了光辉业绩,没有他这一切将完全不同。


via: http://thevarguy.com/ubuntu/052214/ubuntu-linux-community-manager-jono-bacon-leaves-canonical

译者:linuhap 校对:Caroline

本文由 LCTT 原创翻译,Linux中国 荣誉推出

从内容管理系统到简单的表格,数据库是每一个开发项目的一部分。这就是为什么开发者们如此强调使用正确类型的数据库工具。下面这些可能对您有所帮助!

1. Autotabla

Autotabla是一个你的程序的SQL数据表的CGI管理界面。只需要提供你数据库架构的XML描述,你就可以创建/修改/删除数据库记录。 HTML输出可以通过CSS完全自定义。使用Perl/DBI模块而支持各种数据库。

2. Cruddy!

Cruddy!是一个以CGI::CRUD为框架的应用程序,它为你的数据库提供了一个即时的Web前端的CRUD接口。

3. myPhile

这是一个可定制的MySQL表的通用管理界面。

4. NG-Admin

这是一个数据库内容的管理工具。

5. phpMoAdmin

这是一个PHP写的MongoDB管理工具。

6. phpMSAdmin

phpMSAdmin是用PHP编写的工具,它允许您通过Web浏览器管理一个微软的SQL Server ,而不需要Windows或专有的企业管理器。它允许你创建/修改:数据库,表,视图,触发器等

7. RockMongo

RockMongo,一个MongoDB的管理工具,在PHP5中实现,类似phpMyAdmin。

8. WizMySQLAdmin

WizMySQLAdmin类似最有名的MySQL数据库管理器phpMyAdmin,但它非常易于安装和维护。它只由一个文件组成,并支持多种数据库和表的创建和处理。


via: http://www.efytimes.com/e1/fullnews.asp?edid=138307

译者:乌龙茶 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Linux上有着许多不同口味儿的截屏工具,包括桌面环境专用的截屏程序(如: KDE里面的KSnapshot,GNOME里面的gnome-screenshot,Xfce的Screenshooter),或者是通用的截屏程序(如 Shutter)。而Scort("SCReen shOT"的缩写)是最独一无二的截屏工具之一,它是一个命令行截屏工具。虽然它的界面十分简约,但Scrot在功能上和其它专用的基于GUI的屏幕捕获工具一样强大。举个例子,Scrot支持延时截屏,截屏调整品质/大小,命令行传递等功能。如果你是那些热衷命令行的爱好者之一,Scrot应该是你加入兵器库中的又一实用工具。在这个教程中,我将会描述如何在命令行中用Scrot截屏

在Linux中安装Scrot

在 Debian,Ubuntu 或 Linux Mint 上安装Scrot:

$ sudo apt-get install scrot

在 Fedora 上安装Scrot:

$ sudo yum install scrot

要在CentOS上安装Scrot,你可以按照下列步骤从源码编译:

首先在CentOS上启用Repoforge,然后使用下列命令:

$ sudo yum install giblib-devel
$ wget http://linuxbrit.co.uk/downloads/scrot-0.8.tar.gz
$ tar xvfvz scrot-0.8.tar.gz
$ cd scrot-0.8
$ ./configure
$ make
$ sudo make install

用Scrot截屏

在这个教程的下面的部分,我会描述如何通过几种不同方法用Scrot截屏。

1. 截下整个桌面

截取整个桌面十分简单。只需运行Scrot命令,不需要任何参数,然后它会保存一张整个桌面的截屏,以(日期标记).png的文件形式保存在当前文件目录下。

$ scrot

你也可以指定保存目标文件夹和截图文件名。

$ scrot ~/Pictures/my_desktop.png

2. 截取特定窗口或矩形区域

Scrot允许你在桌面选择一个特定的窗口或定义一个矩形区域来截图。使用下列命令来实现:

$ scrot -s

运行这个命令后,继续用你的鼠标单击任意窗口或画出一个矩形,它能够触发对选定窗口/区域的屏幕截取。(LCTT译注,还要使用鼠标,伐快乐)

有时候你选定的区域或窗口可能会被桌面的其它窗口部分遮挡。在这种情况下,你在截屏前需要一点时间来清理那个部分。那正是延迟截屏能够帮到你的,就像下面所描述的那样。

3. 延迟截屏

延迟截取在各种情况下都很实用。就在截图前,你可能想要移动一下窗口,激活一下菜单,或是触发特定时间(如通知)等等。 使用“-d N”参数,我们可以将截屏进程延迟N秒。

$ scrot -s -d 5

4. 调整截屏质量

你可以在1到100的范围内调整截取的图像质量(数字越大质量越高)。默认质量设置为75。

$ scrot -q 50

5. 调整截屏尺寸

你可以在1到100的范围内调整截取的图像尺寸(数字越大尺寸越大)。减小截屏的尺寸到原图的10%:

$ scrot -t 10

6. 将截取的截屏传递给其它命令

Scrot允许你发送保存的截屏图像给任意一个命令作为它们的输入。这个选项在你想对截屏图像做任意后期处理的时候十分实用。截屏的文件名/路径跟随于“$f”字符串之后。

$ scrot -e 'mv $f ~/screenshots'

via: http://xmodulo.com/2014/05/take-screenshot-command-line-linux.html

译者:alim0x 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出