2014年6月

你曾想过从一个视频文件中提取图片吗?在Linux下就可以,在这个教程中我将使用ffmpeg来从视频中获取图片。

什么是ffmpeg?What is ffmpeg?

ffmpeg是一个非常有用的命令行程序,它可以用来转码媒体文件。它是领先的多媒体框架FFmpeg的一部分,其有很多功能,比如解码、编码、转码、混流、分离、转化为流、过滤以及播放几乎所有的由人和机器创建的媒体文件。

在这个框架中包含有各种工具,每一个用于完成特定的功能。例如,ffserver能够将多媒体文件转化为用于实时广播的流,ffprobe用于分析多媒体流,ffplay可以当作一个简易的媒体播放器,ffmpeg则能够转换多媒体文件格式。

如果你感兴趣,以下列出的是FFmpeg框架中包含的开发者库:

  • libavutil是一个包含简化编程功能的库,其中包括随机数生成器,数据结构,数学代码,核心多媒体工具等更多东西。
  • libavcodec是一个包含音频/视频解码器和编码器的库。
  • libavformat是一个包含了多媒体格式的分离器和混流器的库。
  • libavdevice是一个包含输入输出设备的库,用于捕捉和渲染很多来自常用的多媒体输入/输出软件框架的数据,包括Video4Linux,Video4Linux2,VfW和ALSA。
  • libavfilter是一个包含媒体过滤器的库。
  • libswscale是一个用于执行高度优化的图像缩放和颜色空间/像素格式转换操作的库。
  • libswresample是一个用于执行高度优化的音频重采样,重新矩阵和取样格式转换操作的库。

注意:ffmpeg和FFmpeg不是同一个东西。FFmpeg是框架,而ffmpeg是一个其中的一个功能。

开始行动

如果你想跟着教程做,你需要在你的linux机中安装ffmpeg命令行功能。Ubuntu用户可以在终端运行以下命令轻松安装ffmpeg功能。

sudo apt-get install ffmpeg

Fedora用户可以从源中直接安装ffmpeg。

yum install ffmpeg

或者你可以编译源代码。在你使用源代码编译并安装它之前,你需要从官网上下载源代码,使用以下命令。

wget http://www.ffmpeg.org/releases/ffmpeg-2.2.3.tar.bz2

用下面命令解压文档。

tar -xvjf ffmpeg-2.2.3.tar.bz2

文档解压完成后进入解压后的目录运行以下命令。

./configure
make

编译完成后运行下面的命令安装ffmpeg。

su -c 'make install'

全部的事情并没有完成,而你将要做的所有事就是在终端键入一些命令而且将能够从任何视频文件中抓取图片。

在做之后的步骤前,确保你在想要提取图片的视频文件的目录下。使用cd命令切换到正确的目录。教程中我使用的视频在我的桌面上,我用以下命令将目录切换到我的桌面。

cd /home/oltjano/Desktop

之后我使用以下命令从视频中提取图片。

ffmpeg -i "你是我的小呀小苹果儿.mp4" -r 1 -q:v 2 -f image2 image-3%d.jpeg

-i选项用来获取输入文件,在这里是视频文件名你是我的小呀小苹果儿.mp4,-r选项设置每秒提取图片的帧数。我想要每秒提取一帧。

之后有一个重要的选项是-q:v,应该留意这个选项并且我很喜欢用它,它用来设置提取到的图片质量。我总是设置值为2来从视频中获取高质量图片。


via: http://www.unixmen.com/extract-images-videos-using-ffmpeg/

译者:linuhap 校对:wxy

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

Nuvola Player是一个开源的播放器,可以在其web界面中运行像Amazon云播放器,Bandcamp,Deezer,8tracks,Google Play音乐,Grooveshark,Hyper Machine以及Pandora等等云音乐服务,同时它也能整合到Linux桌面中。

该应用程序以插件的形式提供了大量的功能特性,像桌面通知、系统托盘、多媒体键、媒体播放器小程序、停靠栏菜单、歌词、last.fm等等。

2014年5月31日Nuvola Player 2.4.0的一个新版本发布了 —— 它带来了一些新的特性,包括两个新的服务“Logitech Media Server”和“This is My Jam ”,以及众多的bug修复。

这个发布中有什么新东西

  • 删除了破损的隐藏Google+按钮选项,因为Google修改代码过于频繁了。
  • 加快了服务设置的启用速度,不需要再重新加载。
  • 修复了暂停和播放/暂停动作开关。
  • 为Chrome添加了兼容问题警告桌面通知。
  • 提供了页面内导航按钮(现在用户可以在Google Play标识旁边的顶部栏中找到它)。
  • 添加了“Logitech Media Server”和“This is My Jam ”服务。
  • 包含了对鼠标后退/前进按钮的支持。
  • 修复了对GNOME锁屏通知的支持。

要查看完整的特性列表,请访问官方发行声明页面

在Debian, Ubuntu和Linux Mint中安装Nuvola Player

官方的Nuvola Player仓库中包含了Ubuntu 14.04, 13.10, 12.10, 12.04以及Linux Mint 17, 16, 15, 14.可用的二进制包,你可以通过添加Nuvola Player仓库到你的系统中来安装二进制包‘nuvolaplayer’。

在Ubuntu和Linux Mint上

打开终端并运行以下一系列命令:

$ sudo add-apt-repository ppa:nuvola-player-builders/stable
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install nuvolaplayer

:请不要忽略系统更新命令‘sudo apt-get upgrade’,否则你的apt-get安装Flash插件可能会失败。

如果你不需要Nuvola Player支持Flash插件,你可以忽略系统升级命令,并使用以下命令来安装不带Flash支持得nuvolaplayer。

$ sudo apt-get --no-install-recommends install nuvolaplayer

在Debian上

对于Debian WheezyDebian Sid,可以从官方仓库中获取稳定的Nuvola Player二进制包。你可以使用下面这一堆命令来安装最新的稳定版。

首先,打开终端并导入公钥,然后添加仓库到‘sources.list‘文件,接着像下面这样进行一次系统更新来安装nuvolaplayer。

Debian Wheezy

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 706C220A
$ sudo sh -c 'echo "deb http://ppa.fenryxo.cz/nuvola-player/ wheezy main" >> /etc/apt/sources.list'
$ sudo sh -c 'echo "deb-src http://ppa.fenryxo.cz/nuvola-player/ wheezy main" >> /etc/apt/sources.list'
$ sudo apt-get update
$ sudo apt-get install nuvolaplayer

Debian Sid

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 706C220A
$ sudo sh -c 'echo "deb http://ppa.fenryxo.cz/nuvola-player/ sid main" >> /etc/apt/sources.list'
$ sudo sh -c 'echo "deb-src http://ppa.fenryxo.cz/nuvola-player/ sid main" >> /etc/apt/sources.list'
$ sudo apt-get update
$ sudo apt-get install nuvolaplayer

:Nuvola Player依赖于打包的Flash插件,而该插件会因为存在库文件冲突(GTK+ 2和GTK+ 3**)而默认不会安装。

要解决该问题,我们需要启用flashPPA组件来安装‘nuvolaplayer-flashplugin‘包,命令如下。

$ sudo sh -c 'echo "deb http://ppa.fenryxo.cz/nuvola-player/ sid main beta flash" >> /etc/apt/sources.list'
$ sudo sh -c 'echo "deb-src http://ppa.fenryxo.cz/nuvola-player/ sid main beta flash" >> /etc/apt/sources.list'
$ apt-get update
$ apt-get install nuvolaplayer-flashplugin

一旦完成安装,你可以在菜单中找到该应用并启动它。记住,想要听音乐,你必须连接到互联网。

Nuvola Player美图欣赏

Nuvola Player Services 选择音乐服务

Grooveshark Music Service Grooveshark音乐服务

Grooveshark Playing Music Grooveshark播放音乐

Nuvola Player Preferences Nuvola Player首选项

Google Play Music Google Play音乐

Rdio Music Service Rdio音乐服务

About Nuvola Player 关于Nuvola Player

对于其它Linux发行版,你可以从 Nuvola Player启动板下载页下载源码tarball。


via: http://www.tecmint.com/install-nuvola-player-in-linux/

译者:GOLinux 校对:wxy

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

你好!本篇我们将继续配置"kernel hacks",接着我们会配置整个安全系统。

Alpha和s390处理器需要配置下一个特性(Force weak per-cpu definitions)。这个特性修复了一个在这类处理器中普遍存在的寻址问题。其他的处理器无需启用这个特性。

内核转储可以用这个特殊的调试工具测试(Linux Kernel Dump Test Tool Module)。这个软件会允许内核开发者触发一个假错误来导致内核转储。内核开发者可以保证转储成功执行。

内核提供了不同的错误注射模块来允许内核开发者测试通知(CPU notifier error injection module)、 (PM notifier error injection module) 和 (Memory hotplug notifier error injection module)。通知器提醒系统硬件还在,这对热插拔很重要。这些错误注射模块在这些通知系统中触发一个错误,那么开发者就可以测试通知系统的错误处理能力了。

"Fault-injection framework"驱动提供了不同的用于测试错误处理的工具。

"Latency measuring infrastructure"驱动提供了延迟检测工具LatencyTop,以找出用户空间中由于内核执行/任务而被阻碍/干扰的对象。

下面,我们有一个子菜单名为"Tracers",它包含了不同追踪器的列表。追踪器是一段监视不同内核函数的代码。每次某个特定的函数启动,追踪器将被调用来检测函数。

下面的模块用来测试红黑树库的性能(Red-Black tree test)。红黑树是一个排序和搜索算法。

下面的特性是相同的除了用来测试区间树库(Interval tree test)。

在启动远程特定系统时,内核同样可以在其他系统上调试FireWire (Remote debugging over FireWire early on boot) 和 (Remote debugging over FireWire with firewire-ohci)。

printk()函数可以用来打印不同的调试信息,如果这个特性启用的话(Enable dynamic printk() support)。"printk()"是一个常被讨论的系统调用,所以记住这个打印内核相关消息。

这是一个直接内存访问(DMA)调试驱动(Enable debugging of DMA-API usage)。

Atomic64自我测试检查系统是否支持原子操作(Perform an atomic64\_t self-test at boot)。这是一个32位系统执行64位操作。

这个驱动提供了对于所有可能的RAID6恢复系统的自检(Self test for hardware accelerated raid6 recovery)。

注意:自检是底层测试并且在绝大多数系统硬件和软件开启和执行前侦查软件。自检搜索硬件,失败的设备等等。自检也可能被编成应用以测试它本身。

在"Kernel Hacking"菜单中(如果你是用的是像ncurses那样的菜单接口),有一个名为"Sample kernel code"的子菜单。在以后的文章中,我们会讨论如何实现自定义/自制内核模块。只要记住这里是启用你自己的模块。

Kernel GNU DeBugger (KGDB)(内核调试器)有许多特性可以启用或者禁用(KGDB: kernel debugger)。这个调试器只工作在通过串行连接的两个Linux系统之间。

这个特性提供在启动时显示额外bzimage解压消息(Enable verbose x86 bootup info messages)。在内核配置的开始部分你设置了内核加密。

printk()打印不同的消息到dmsg的启动界面,但是在串行和控制台驱动加载后。启用这个驱动会使printk()更早打印信息(Early printk)。

下一个驱动和上面的一样,但是使用EHCI端口(Early printk via EHCI debug port)。

内核可以被设置来观察堆栈溢出,这样内核可以更好地管理错误(Check for stack overflows)。内核会执行的更慢,但是溢出不会造成如此大的损害。

通过启用这个,内核页面可用debugfs见到(Export kernel pagetable layout to userspace via debugfs)。然而,这个会使内核变慢。这个用于调试目的。

内核的写入错误可以被这个特性捕捉到(Write protect kernel read-only data structures)。这个选项会使内核的只读数据编程进入写保护模式。此调试工具会损害内核的速度。该调试工具还有一个用来调试其自身的工具(Testcase for the DEBUG\_RODATA feature)。

为了防止被修改过代码的模块执行(由于一个错误),接着启用这个保护性特性 (Set loadable kernel module data as NX and text as RO)。这个调试工具由这个驱动提供(Testcase for the NX non-executable stack feature)。

使用这个选项,内核可以一次刷新一个TLB条目或者整张表 (Set upper limit of TLB entries to flush one-by-one)。

下一个特性是IOMMU调试特性(Enable IOMMU debugging)。这是另外一个调试测试,禁用一些IOMMU特性来用于测试稳定性(Enable IOMMU stress-test mode)。IOMMU代表"input/output memory management unit"(输入/输出内存管理单元)。

启用这个选项回事内核以30s的间隔在changepageattr()系统调用上执行单端测试。这个系统调用会改变页的属性。

任何被标以"inline"的内核代码,如果没有被表明的也同样会被GCC操作(Allow gcc to uninline functions marked)。GCC编译器会增加使得代码更好的代码(GCC擅长这么做)。然而,一些代码不想被GCC操作。

下面的驱动提供了对"copyfromuser()"系统调用的基本测试(Strict copy size checks)。copyfcromuser()从用户空间拷贝数据块到内核空间中。

这里还有一个自检;它用于NMI(NMI Selftest)。

现在,我们会进入"Security Options",如果你使用像ncurses的基于菜单的接口时。第一个选项允许访问内核中存储的键和验证令牌(Enable access key retention support)。这有很多原因用到,像访问加密文件系统。

下面的选项用于创建并密封/开启键((TRUSTED KEYS))。加密的键使用这个驱动加密/解密(ENCRYPTED KEYS)。

启用这个特性键可以在/proc中看到(Enable the /proc/keys file by which keys may be viewed)。

使用这个安全特性,额外的限制可以应用到syslog中(Restrict unprivileged access to the kernel syslog)。

如果启用这个选项,那么用户可以选择不同的安全模块(Enable different security models)。不然,将会使用默认。如果你不完全理解安全或者如果你对使用默认感到没问题,那么就禁用它。

这个驱动提供了securityfs文件系统(Enable the securityfs filesystem)。

当启用这个特性后,钩子将会被增加到网络和套接字安全中(Socket and Networking Security Hooks)。这些钩子是访问控制。

IPSec网络钩子(also called XFRM networking hooks)在这个选项启用后实现(XFRM (IPSec) Networking Security Hooks)。安全钩子同样可被文件使用(Security hooks for pathname based access control)。

下一个驱动提供了对Intel可信赖执行技术的支持(Enable Intel(R) Trusted Execution Technology (Intel(R) TXT))。

用户可以设置无法为用户空间保留的内存寻址范围(Low address space for LSM to protect from user allocation)。开始点是0。用户在此选项中输入结束点。对于大多数平台而言,65536是一个建议值。

SELinux(在内核安全的文章中提到)是一种流行的Linux安全模块(NSA SELinux Support)。SELinux存在很多选项和特性。启动参数决定了当内核执行(NSA SELinux boot parameter)时SELinux是否启动{1}或者不启动{0}。SELinux可以被配置成在root用户需要时临时禁止(NSA SELinux runtime disable)。用户可以启用这个特性开发并测试新的策略(NSA SELinux Development Support)。AVC统计被这个特性收集并被存储 (NSA SELinux AVC Statistics)。对于checkreqprot标志有一个默认设置;"1"意味着SElinux会检查应用请求的保护,"0"会默认使用内核对mmap和mprotect系统调用的保护(NSA SELinux checkreqprot default value)。存在很多的SElinux策略;用户可以设置他们不希望SELinux excede的最新版本(NSA SELinux maximum supported policy format version)。

另外一个Linux安全模块(LSM),SMACK,也被内核支持(Simplified Mandatory Access Control Kernel Support)。

TOMOYO是另外一个被支持的LSM(TOMOYO Linux Support)。在学习模式中允许被添加的最大条目数目在下面的特性中设置(Default maximal count for audit log)。接下来,这个选项允许/禁用TOMOYO在没有策略加载器下被激活(Activate without calling userspace policy loader)。策略加载器的位置在这里被配置((/sbin/tomoyo-init) Location of userspace policy loader),触发执行的可执行文件在这里设置((/sbin/init) Trigger for calling userspace policy loader)。

再说一次,内核支持另外一个LSM - APPArmor(AppArmor support)。像SELinux一样,可以为AppArmor设置默认的启动参数(AppArmor boot parameter default value)。

Yama是另外一个LSM(Yama support)。如果启用这个特性Yama可以与另外一个LSM一起使用(Yama stacked with other LSMs)。

这个驱动让内核可以使用多个密钥链来验证进程(Digital signature verification using multiple keyrings)。

非对称键在这个特性中支持(Enable asymmetric keys support)。

内核可以保存并维护一个哈希和重要系统文件的列表(Integrity Measurement Architecture(IMA))。那么,如果恶意软件改变了一个重要的文件,内核会知道因为文件或者可执行文件被使用时内核会检测哈希值。强烈建议启用这个特性。

如果启用这个特性会加入额外的安全属性(EVM support)。可以用下面的选项设置版本(EVM HMAC version)。有两个选项分别是version 1和2。

记住所有的Linux安全模块的不同了么(LSMs)?好的,下面可以设置默认模块(Default security module (AppArmor))。

下一篇中,我们会配置"Cryptographic API"。我估计还会剩下两篇文章。在这之后,我们会讨论其他的内核主题。

先睹为快:本篇之后,关于配置还有一篇。接着,我们会完成编译并安装内核。

致我的粉丝:你随意给我致信或者给我电子邮件来建议你希望在以后的内核文章中想要看到的主题。我已经收到了一些来自这个系列读者的一些建议。请随意给我更多建议。


via: http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-22.5017/

译者:geekpi 校对:wxy

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

通常的 Linux 发行版都使用 KDE 或者 GNOME 作为默认的桌面环境。它们都给用户提供了一个原始的并且有吸引力的桌面,并且内置了各式各样的多媒体软件、系统程序、游戏、实用程序、网页开发工具、编程工具等等。这两个桌面致力于提供给用户一个拥有类似于 Windows 操作系统体验的尖端计算环境,而不是如何更少的占用系统资源。

如果你正在使用 Ubuntu (或者其他Linux发行版) 并且厌倦了始终使用 Unity 桌面,那么你应该看看这些可以替代 Unity 的选择。我收集了 7 种桌面环境。它们都很棒。在你读完这篇文章之后,请试着使用它们吧。

Mate

MATE 是 GNOME2 的一个分支。它提供了一个自然且吸引人的桌面环境。它是 Linux 和其它类 Unix 工作环境中的传统工作框架的代表。MATE 在保留传统的桌面体验的同时正在不断进步使用新的技术。

在 Ubuntu 14.04 中,可以直接从 Ubuntu 软件中心获取 MATE 桌面。

KDE

KDE 是另一个类似于 GNOME 一样的重量级桌面环境。它在本文章所提及的7种桌面环境中被认为是最华丽最重量级的一个。它同样是一个类似于 Windows 的桌面,在这一点上没有什么特殊的变化。不过 KDE 非常有特点,但是随之而来的是可以通过大量的设置来提升你的桌面体验。同样的,有很多关于 KDE 的话题,所以你可以很舒服的使用 KDE,并让它以你希望的方式工作。

Cinnamon

Cinnamon 是一个基于 Gtk+ 的环境。它最初作为 GNOME Shell 的一个用户界面分支,由 Linux Mint 为其创建的。 Cinnamon 的核心设计目标是让桌面终端和触屏设备都能完美操作。无论是使用鼠标,还是使用触摸屏都可以获得同样便捷的操作。不像 KDE Plasma 工作空间,只有一种图形用户体验。当前版本—— Cinnamon 2.0 于2013年10月10日发布。

Unity

Unity 是 GNOME 桌面环境的一个界面,由 Canonical 公司创建,用于 Ubuntu 系统中。Unity 最初现身于 Ubuntu 10.10 的上网本版本中。它起初打算充分利用上网本的屏幕空间,例如一个竖直的应用启动器和一个节省空间的多功能顶部菜单栏。Unity 不像 GNOME、KDE、 Xfce 或者 LXDE 是许多软件的合集,它是为了可用性而开发的。

GNOME Shell

GNOME 提供了桌面核心接口例如交换窗口,启动应用程序以及显示提示。它利用先进的图形硬件来实现吸引人的、创新的界面思想,提供了愉悦简单的用户体验。GNOME Shell 定义了 GNOME 3 的客户体验。

作为 GNOME 的一个重要组成部分, GNOME Shell 的稳定版本首次发布于2011年3月3日。

Xfce

Xfce 是一个轻量级的桌面环境,围绕 GTK 框架实现。它看起来很像 Gnome 2 和 MATE,然而 Xfce 是它们的轻量级替代品。相较于 KDE 和 GNOME 3 而言,Xfce 非常轻量级,所以它对于运行轻量级的工具或者那些希望实现最大执行效率的框架使用者来说是理想的环境。它还不是可以获得的最轻量级的选择 - 请继续往下看 - 然而,Xfce 的确完成了执行效率和功能的平衡。

LXDE

LXDE 显然是桌面环境中最轻量级的选择,至少在传统的桌面标准中是这样。这个基于 GTK 的桌面环境使用了很多轻量级的选择替代了默认的应用(例如 Abiword, Gnumeric, 而不是 LibreOffice)。它没有提供炫目的视觉震撼 ,总体感觉也不是特别的棒,没有高级的设置。但是,LXDE 仍然提供了漂亮的桌面和完整的功能。当你需要快速简洁时,它就是你的选择。


via: http://pulpybucket.com/top-7-desktop-environment-linux/

译者:wwhio 校对:Caroline

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

近来的大多数的新计算机都有了USB 3.0接口了。但是你怎么知道你的计算机有没有USB 3.0接口?这篇短文中,我们会告诉如何在Linux下知道你的系统上有USB 3还是USB3接口。

在Linux终端中检测是否有USB 3.0 端口

打开一个终端,并使用下面的命令:

lsusb

这个命令会显示你系统下USB的总线信息。检查一下结果,如果你看到像“3.0 root hub”字样,这意味着你系统有USB 3.0。比如,在我的电脑上,它这样显示:

How to find if system has USB 3.0 in Linux

这个技巧在所有的Linux系统上,像Ubuntu,Linux Mint,Fedora等等都有效。现在当你知道你有USB 3.0 端口之后,**如何辨别哪个口是USB 3.0,哪个是USB 2.0。

辨别哪个口是USB 3.0

通常USB 3.0 口被标记为SS(“Super Speed”的缩写)。如果你的系统制造商没有标记SS或者USB 3,那么你可以检查端口的内部通常是蓝色的。

find usb 3.0 port

我希望这个快捷提示能够帮助你知道你系统是否有USB 3.0 并可以分辨出USB 3.0 口


via: http://itsfoss.com/find-usb-3-port-linux/

译者:geekpi 校对:wxy

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

随着之前有关面试的系列文章,读者的反应比较强烈,所以我决定出一篇有关Linux Shell相关的面试文章,如果对本文有什么意见或意见的话,欢迎反馈到我的邮箱里。

如果想要阅读已发表在Tecmint.com的文章,可以点击链接,链接到访谈系列,在这里我们已经介绍很多题目即文章。,FTP,MySQL和Apache的,脚本,Linux命令等。

Practical Interview Question on Shell Scripting

实用的shell脚本面试问题

这边提到的5个面试问题,延续之前的有关Linux面试问题和答案。如果你是Tecmint.com的读者,你的支持我非常感谢。

1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。

答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd。

现在,创建一个名为userstats.sh文件,将下面的代码添加到它。

#!/bin/bash 
echo "Hello, $LOGNAME" 
echo "Current date is `date`" 
echo "User is `who i am`" 
echo "Current directory `pwd`"

给它添加执行权限,并且执行他。

# chmod 755 userstats.sh 
# ./userstats.sh

样例输出

Hello, avi 
Current date is Sat Jun  7 13:05:29 IST 2014 
User is avi      pts/0        2014-06-07 11:59 (:0) 
Current directory /home/avi/Desktop

2.写一个shell脚本,进行两个数字的相加,如果没有输入参数就输出错误信息和一行使用说明

答案 : 下面是简单的shell脚本以及描述,如果没有命令行参数,它会抛出错误与如何使用脚本的说明。

再创建一个名为twonumbers.sh文件和下面的内容添加到文件里。

#!/bin/bash 
# The Shebang

if [ $# -ne 2 ] 
# If two Inputs are not received from Standard Input

then 
# then execute the below statements

    echo "Usage - $0   x    y" 
    # print on standard output, how-to use the script (Usage - ./1.sh   x    y )

    echo "        Where x and y are two nos for which I will print sum" 
    # print on standard output, “Where x and y are two nos for which I will print sum ”

    exit 1 
    # Leave shell in Error Stage and before the task was successfully carried out.

fi 
# End of the if Statement.

    echo "Sum of $1 and $2 is `expr $1 + $2`"
    # If the above condition was false and user Entered two numbers as a command Line Argument,   
       it will show the sum of the entered numbers.

给他添加可执行权限,并且执行。

# chmod 755 two-numbers.sh

情形一: 未输入两个数字作为命令行参数运行脚本,你将得到下面的输出。

样例输出

# ./two-numbers.sh

Usage - ./two-numbers.sh   x    y 
        Where x and y are two nos for which I will print sum

情形二: 当数字存在时,你会得到如图所示的结果。

$ ./two-numbers.sh 4 5 

Sum of 4 and 5 is 9

因此,上述shell脚本满足了问题的要求。

3.你需要打印一个给定的数字的反序,如输入10572,输出27501,如果没有输入数据,应该抛出错误和使用脚本说明。在此之前,告诉我你需要在这里使用的算法。

算法

  1. 输入的数字为n
  2. 赋值 rev=0, sd=0 (反向和单个数字设置为0)
  3. n % 10, 将得到最左边的数字
  4. 反向数字可以用这个方法生成 rev * 10 + sd
  5. 对输入数字进行右位移操作(除以10)
  6. 如果n > 0, 进入第三步,否则进行第七步
  7. 输出rev

现在,创建一个名为**numbers.sh**文件,并添加以下代码。

#!/bin/bash 
if [ $# -ne 1 ] 
then 
    echo "Usage: $0   number" 
    echo "       I will find reverse of given number" 
    echo "       For eg. $0 0123, I will print 3210" 
    exit 1 
fi 

n=$1 
rev=0 
sd=0 

while [ $n -gt 0 ] 
do 
    sd=`expr $n % 10` 
    rev=`expr $rev \* 10  + $sd` 
    n=`expr $n / 10` 
done 
    echo  "Reverse number is $rev"

授予对文件的执行权限,并运行如下所示的脚本。

# chmod 755 numbers.h

情形一: 当输入不包含命令行参数,你将得到下面的输出。

样例输出

./numbers.sh

Usage: ./numbers.sh  number 
       I will find reverse of given number 
       For eg. ./2.sh 123, I will print 321

情形二: 正常输入

$ ./numbers.sh 10572 

Reverse number is 27501

上面的脚本非常完美,输出正是我们需要的。

4. 你应该直接用终端,而不是依靠任何shell脚本来进行实数计算。你会怎么做(比如实数7.56+2.453)?

答案 : 我们需要用如下所述的特殊方式使用bc命令。将7.56+2.453作为输入通过管道进入bc中。
$ echo 7.56 + 2.453 | bc

10.013

5. 你需要给出圆周率的值,精度为小数点后100位,什么是最简单的方法。

答案 : 找圆周率的值最简单的方法,我们只是需要发出以下命令。
# pi 100 

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067

很明显!安装我们必须有包pi。只用一个aptyum命令,就能获得所需的软件包,同时用最简单方法来实现这个需求。

就是这样。我会很快在Tecmint.com发表另一个有趣的文章。至此敬请关注。别忘了向我们提供您在的评论和反馈。


via: http://www.tecmint.com/practical-interview-questions-on-linux-shell-scripting/

译者:MikeCoder 校对:wxy

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