Questions tagged «shell-script»

有关shell脚本,由shell解释的可执行文件(bash,zsh等)的问题。


6
查找最大的文件或目录
哪个命令将打印tmp目录中所有文件和目录(包括隐藏文件)的大小,并按照人类可读格式(例如2 GB)从大到小进行排序? 输出可能如下: file.mpg 2GB file.avi 1.8GB .backtup 1.7 GB (this is directory) 我尝试使用ls和du命令,但找不到正确的开关。

5
通用的非bash时间基准替代方案?[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 3年前关闭。 为了比较不同外壳之间脚本的运行时间,一些SE答案建议使用bash的内置 time命令,如下所示: time bash -c 'foo.sh' time dash -c 'foo.sh' ... 等,每个要测试的外壳。这样的基准测试无法消除每个shell加载和初始化自身所花费的时间。例如,假设上述两种命令被存储在一缓慢的设备具有早期软盘的读取速度,(124KB /秒), dash(一〜150K可执行程序)将加载大约7倍的速度比bash(〜1M),所述壳加载时间会使time数字产生偏差-这些外壳的预加载时间与加载foo.sh外壳后测量每个外壳下的运行时间无关。 什么是可以在每个Shell中运行的用于脚本计时的最佳便携式和通用工具?因此,上面的代码如下所示: bash -c 'general_timer_util foo.sh' dash -c 'general_timer_util foo.sh' 注意:因为没有可移植的或通用的命令,所以没有外壳内置 time命令。 更好的是,该实用程序还能够对Shell内部命令和管道所花费的时间进行基准测试,而无需用户先将它们包装在脚本中。这样的人工语法会有所帮助: general_timer_util "while read x ; do echo x ; done < foo" 一些shell time可以管理这个。例如bash -c "time while false ; do : …

1
删除超过500天的文件
我的目录包含2010年以来的文件。.我想删除所有500天以上的文件,我尝试这样做: find /var/log/arc/* -type f -mtime +500 -delete {}\; 但是我得到这个: -bash: /usr/bin/find: Argument list too long 据我所知,这意味着文件太多,find无法处理它们。但是,即使我提出了+20003年以上的建议,我仍然会做到这一点。 我在这里想念的是什么?

3
我可以在Bash大括号扩展中使用变量吗?
以下是我要完成的某种伪代码: #!/bin/bash # I already have the variable below figured out (positive integer): numlines=$([returns number of lines containing specific characters in a file]) # This is basically what I want to do with it: for i in {1..$numlines}; do # the part below is already figured out as well: do …

4
在bash脚本中使用chown $ USER:$ USER
在一个小的bash脚本中,我正在运行,尝试创建一个新目录。我已经添加: sudo chown $USER:$USER /var/www/$sitename sudo chmod 775 /var/www/$sitename 我mkdir(sudo mkdir /var/www/$sitename)所在的行之后。 由于某些原因,chown没有执行。我可以手动执行它,但是当写入文件时它不起作用。我注意到,“ chown”没有以与“ mkdir”和“ chmod”相同的颜色突出显示,但是我无法弄清楚我的问题。 为什么chown在这里不工作? 这有问题$USER:$USER吗? 编辑 这是完整的脚本。无论非root用户执行脚本时,我如何将文件整理给谁? #!/bin/sh #!/bin/bash # New Site cd /etc/apache2/sites-available/ echo "New site name (test.my):" read sitename echo "<VirtualHost *:80> ServerAdmin admin@$sitename ServerName $sitename ServerAlias $sitename DocumentRoot /var/www/$sitename <Directory /> Options FollowSymLinks AllowOverride …

6
如何删除bash中的尾随换行符?
我正在寻找行为类似于Perl的产品chomp。我正在寻找一个仅打印其输入的命令,如果它是换行符,则减去最后一个字符: $ printf "one\ntwo\n" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done $ printf "one\ntwo" | COMMAND_IM_LOOKING_FOR ; echo " done" one two done (Bash和Zsh中的命令替换会删除所有尾随的新行,但是我正在寻找一种最多删除一个尾随的新行的东西。)

2
为什么在远程计算机上运行脚本时文件名为什么包含问号?
我有一个很小的脚本,可以简单地获取当前日期,运行PHP脚本并将输出(和错误)重定向到包含当前日期的文件名。 DATE=$(date +"%Y%m%d") FILE="log/${DATE}.log" php -q script.php >> $FILE 2>&1 当我在本地计算机(Windows 7,Aptana IDE)上运行此脚本时,PHP脚本可以正常工作,并且日志文件具有预期的文件名,例如20140502.log。 但是,当我通过SFTP将脚本推送到我的远程计算机并执行该脚本时,文件名看起来像这样: 20140502?.log? 可能是什么问题?这是一个必然的错误吗(例如,SFTP上传的编码是ANSII,期望使用UTF-8)?还是我必须更改脚本本身中的任何内容? 有关系统/外壳的信息: [foo@bar path]$ sh --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) 有趣的事实:如果该脚本由cronjob调用,则不会出现问号。仅当我手动运行脚本时。

3
获取文件的独占读/写锁定以进行原子更新
我想要一个用作计数器的文件。用户A将写入并递增该数字,而用户B请求读取文件。用户A是否可以锁定此文件,以便在用户A的写操作完成之前没有人可以对其进行读写? 我已经调查过,flock但似乎无法按我期望的那样工作。 flock -x -w 5 /dev/shm/counter.txt echo "4" > /dev/shm/counter.txt && sleep 5 如果有一种更合适的方法来获得类似于原子的增量文件,那也将很高兴听到! 我的目标是: LOCK counter.txt; write to counter.txt; 同时 Read counter.txt; realize it's locked so wait until that lock is finished.

3
Bash脚本;优化加工速度
我想知道是否有优化Bash脚本的一般准则。 例如,写循环比命令行更方便,但是系统处理起来也更快吗?例: for i in a b c; do echo $i; done echo a echo b echo c 有时人们针对同一问题提出不同的解决方案。例如,sed,cut,awk,和echo都能够从一个字符串中去除数字。我想知道您是否可以说数字位数越少,使用的速度就越快: 相同的命令,例如 STRING=abc.def echo ${STRING} | sed 's/.def//g' echo ${STRING} | sed '$s/....$//' 不同的命令,例如 STRING=abc.def echo ${STRING} | cut -d . -f 1 echo ${STRING} | sed 's/.def//g'

4
如何在Linux中为用户分配初始密码/默认密码?
我找到了说明如何设置用户密码的指南。我正在尝试使其自动化并向用户发送电子邮件,例如: userid created with password XYZ. request to change the initial password. 根据上面的文档,需要使用Python创建加密的密码,并将其输入以下usermod命令: usermod -p "<encrypted-password>" <username> 还有其他更简单的方法吗?我不想下载任何特殊的实用程序来执行此操作;应该尽可能地概括。 编辑:甚至上面链接中给定的方法似乎不适用于我: bash-3.00# python Python 2.4.6 (#1, Dec 13 2009, 23:43:51) [C] on sunos5 Type "help", "copyright", "credits" or "license" for more information. >>> import crypt; print crypt.crypt("<password>","<salt>") <sOMrcxm7pCPI >>> ^D bash-3.00# useradd …

4
bash脚本中的逻辑AND
我的ifbash脚本中有一个必须检查2个文件是否存在的文件,如果不存在,则应回显匹配。 代码我有: if [[ ! -f /etc/benchmarking/code ]] && [[ ! -f /etc/benchmarking/code.class ]]; then echo "match" fi 但这出于某种原因似乎不起作用。 我有110%的肯定这两个文件不存在。我没有任何错误,只是没有输入if。 我是bash脚本的新手,所以不确定是否可能出问题。

5
如何配置shell脚本?
我有几个正在Shell脚本中执行的程序: ./myprogram1 ./myprogram2 ... 我知道我可以通过编辑源代码来分析每个程序,但是我想知道是否有一种方法可以通过分析脚本本身来测量执行的总时间。是否有可以用于此目的的计时器程序?如果是这样,它的测量精度如何?

2
使用`select`命令在Bash中打印菜单
我正在尝试使用select命令实现一个简单的菜单。脚本(出于测试目的)如下: #!/bin/bash echo "*******************" PS3='Select an option and press Enter: ' options=("apache" "named" "sendmail") select opt in "${options[@]}" do case $opt in "apache") date ;; "named") echo "test" ;; "sendmail") echo "test 2" ;; *) echo "invalid option";; esac done echo "*********************" 脚本无法识别我提供的任何有效输入,并且始终打印“无效选项”消息。这个脚本在做什么错?

3
有没有将密码传递到Systemd Unit文件的典型方法?
我想使用systemd单位文件启动服务。此服务需要密码才能启动。我不想将密码以明文形式存储在systemd单元文件中,因为它是世界可读的。我也不想以交互方式提供此密码。 如果要为此编写普通脚本,则将凭据存储在具有受限权限(400或600)的root拥有的文件中,然后将其作为脚本的一部分读取。是否有任何特定的systemd风格的方法可以执行此操作,还是应该遵循与常规Shell脚本中相同的过程?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.