Articles of bash

比较shell脚本中的string

我正在创build一个脚本来检查我的客户之一有关虚拟机的要求。 脚本的第一部分是检查操作系统是否是虚拟的。 为了实现这个目标,我创build了以下脚本。 问题是,即使系统是虚拟的,它不工作,我的意思是testing,如果不工作! 有没有人可以帮助,并说如果我做错了什么(我是初学者在shell脚本,可能是错误的)。 CHECK_SYSTEM=`dmidecode | grep -i "Product Name: VMware Virtual Platform"` if [ "$CHECK_SYSTEM" = "Product Name: VMware Virtual Platform" ] ; then printf "%s\n" "The system is Virtual" else printf "%s\n" "The system is not Virtual" exit 192 fi

grep正则expression式标准输出到telnet

我正在尝试使用grep来获取正则expression式结果,并将结果通过pipe道运行到运行开放端口的telnet到节点服务器。 grep收到的是连续的,但是间隔不同,命令从一个运行的程序中找出一个数字,然后通过远程login的pipe道。 下面是我的例子: echo "TEST 1234\r\n" | grep -e "[0-9]{4}" | telnet 127.0.0.1 1234 我不能改变回声“恶搞”的string格式。 没有grep的echo成功发送string到telnet。 grep似乎没有发送到stdOut。 我期待telnet从pipe道接收数据,如: 1234 7645 8376 任何帮助如何实现这一目标?

查找文件和tar.gz结果列表

执行以下命令按预期工作: find /path/to/logs/ \( -type f -name '*20161005.log' \) -print0 | tar -czvf /path/to/backups/backup_logs_20161005.tar.gz –null -T – 但是,试图在bash脚本中使用这个,我得到一个空的.tar.gz文件: #!/bin/bash now="$(date)" printf "Current date and time: $now" ## working paths LOGSPATH="/path/to/logs/" BACKPATH="/path/to/backups/" ## date to work with DATETIME=`date -d "yesterday 13:00 " '+%Y%m%d'` ## find files matching the working date and .tar.gz the result printf "\nStarting […]

在文件名中replace通配符

我无法得到这个工作: 我有数百个文件,我们的数据库开发人员愚蠢地把星号,所以我们有像这样命名的文件: *1*_Floorplan.jpg 我需要recursion(两级)search并replace所有文件名中的“ * ”的所有实例,并用下划线“ _ ”replace它们。 我已经尝试了以下,但它失败了,输出“mv”命令的使用格式数百次(就好像每个文件它会试图处理),就像我所期望的,如果我有无效的语法,但我似乎无法find它有什么问题: for x in `find . -regex '.*/\*.*'` ; do mv $x `echo $x | sed s/\*/_/g` ; done 这是一个Mac(10.4)系统,所以这是一个达尔文环境,如果这有什么区别。 请帮忙!

yum列表已安装,包括所有已安装的软件包版本CentOS 5.4

我有一个在CentOS 5.4上安装了yum的软件包列表 [root@server ~]# yum list installed … Installed Packages GConf2.x86_64 2.14.0-9.el5 installed ImageMagick.x86_64 6.2.8.0-4.el5_1.1 installed MAKEDEV.x86_64 3.23-1.2 installed MySQL-python.x86_64 1.2.1-1 installed 我想在本地下载这些rpm yumdownloader –resolve MySQL-python-1.2.1-1.x86_64等 然而,软件包格式不同( MySQL-python.x86_64 1.2.1-1 vs MySQL-python-1.2.1-1.x86_64 ),所以我无法使用上述命令下载它们。 我不想分析yum list installed的yum list installed的输出,而且我也不想使用/var/log/yum.log*的内容,因为我必须考虑擦除的软件包和版本差异。 不过/var/log/yum.log*确实有我需要的格式… May 25 14:58:15 Installed: groff-1.18.1.1-11.1.x86_64 May 25 14:58:15 Installed: bzip2-1.0.3-4.el5_2.x86_64 有什么build议么?

如何用bashtesting复杂的expression式?

我只能做简单的expression式,如1=1 and 0=1 test 1 = 1 -a 0 = 1 但如何做复杂的expression式,如1=1 and (0=1 or 1=1) ?

用CUPS打印前后运行命令?

这是一个家庭设置。 一个中央打印机服务器(Linux)pipe理队列,HP 2430DTN通过100Mbit / sec以太网连接到它。 打印机连接到可pipe理的电源。 shell脚本监视服务器上的队列(lpstat -o),并在有作业时打开打印机。 如果队列空了10分钟,它将closures打印机。 现在这个设置混乱了,在几个星期后停止了打印机等,一般情况下“不太可靠”。 我现在知道如何改变停止打印机的东西,但是: 有没有办法在脚本上运行我的打印机,并直接从打印机closures脚本的脚本而不看队列? 那太酷了!

等待托盘closures或在bash脚本中插入空白光盘

在我的Linux bash脚本中,我想等待下列其中一个事件: DVD驱动器托盘被用户closures, 要么 可写DVD被插入驱动器。 不幸的是,检查驱动器中的介质的所有命令首先closures托盘,而我不想这样做 – 它应该保持打开并等待用户插入DVD。 你可以请教我怎么做?

find文件名称小于或大于给定的参数

说在一个给定的目录,我得到了 tzury@x200:~/Desktop/sandbox$ ls -l total 20 drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P000 drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P001 drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P002 drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P003 drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N00.P004 drwxr-xr-x 2 tzury tzury 4096 2011-03-09 10:19 N01.P000 drwxr-xr-x […]

debugging器在bash中

我用 sh -xv my_script.sh debugging/ bin / sh脚本。 如何debugging/ bin / bash脚本? 我收到以下错误,我需要知道需要编辑的行。 # ./batch_master.sh '@'10.10.10.10.' (using password: NO)user 'companycuser