Questions tagged «shell-script»

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

3
生成-找不到命令!
我正在使用Mac OS X 10.9.4,以下是我的脚本,用于将文件从本地计算机复制到其他主机 #!/bin/bash #!/usr/bin/expect echo "I will fail if you give junk values!!" echo " " echo "Enter file name: " read filePath echo " " echo "Where you want to copy?" echo "Enter" echo "1. if Host1" echo "2. if Host2" echo "3. if Host3" read choice …

3
在shell脚本中表示布尔值的最佳实践是什么?
我知道,中有布尔值bash,但我从未在任何地方看到过它们。 我想为我的机器上一些经常查找的信息写一个包装,例如,是否插入/安装了此特定的USB驱动器。 实现该目标的最佳实践是什么? 弦吗? drive_xyz_available=true 一个数字(0代表真,≠0代表假)? drive_xyz_available=0 # evaluates to true 有功能吗? drive_xyz_available() { if available_magic; then return 0 else return 1 fi } 我最想知道的是,其他想要使用包装器的人会期望什么。他们期望布尔值,像变量这样的命令或要调用的函数吗? 从安全角度来看,我认为第二种选择是最安全的,但是我很想听听您的经验。

3
bash脚本中的“ 1 >>”和“ 2 >>”是什么意思?
我有以下bash脚本,据我了解>>用于将命令的输出附加到现有文件而不是覆盖,但是在这种情况下该怎么办?该脚本正在调用某些exe文件,以将一种格式转换为另一种格式。每个文件都有很多年,因此它通过查看文件名遍历每个文件。另外,当我运行此脚本时,我会得到“歧义重定向” #!/bin/bash source $HOME/.bashrc jobout=${1} joberr=${2} # Set some paths and prefixes yr_bgn=2000 yr_end=2000 yr=${yr_bgn} pth_data='/mnt/' pth_rst='/mnt/' while [ ${yr} -le ${yr_end} ] do ./executable1 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable2 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} ./executable3 ${pth_data}file${yr}-${yr}.nc ${yr} ${pth_rst} 1>> ${jobout} 2>> ${joberr} let yr=${yr}+1 …

1
从脚本启动后台进程,并在脚本结束时进行管理
我想要类似于脚本中的守护程序来运行和配置进程。 我的Shell是在Cygwin下模拟的zsh,守护进程是基本的FTP服务器SFK。 对于这里重要的事情,脚本startserv.sh可以按如下方式草拟: #!/bin/sh read -s -p "Enter Password: " pw user=testuser share=/fshare cmd="sfk ftpserv -user=$user -pw=$pw -usedir $share=$share" $cmd & 运行脚本后startserv.sh,它停止(结束?)而不显示任何提示,然后: CTRL+ C结束脚本和后台作业过程; 点击Enter脚本将结束该过程,并保留在后台。 无论如何,我只能通过ps而看不到它jobs,因此,当我想关闭该过程时,我必须发送一个残酷的kill -9信号,我希望避免使用 CTRL+ C。 另一种方法 是在后台运行整个脚本。“将”,但是read如果脚本以方式运行,则该命令将无法获取用户输入startserv.sh &。 请注意,我需要一个临时服务器,而不是真正的守护程序:也就是说,我希望服务器进程在脚本结束后在后台运行,以执行简单的交互式Shell任务(使用虚拟机来宾),但是我不希望这样做。不需要生存过程的壳;因此nohup似乎不合适。

8
按扩展名对目录中的文件进行计数
为了进行测试,我想计算一个目录中有多少个图像文件,并用文件扩展名(jpg =“ yes”来分隔每种图像文件类型。这是因为稍后它将对执行动作的另一个脚本很有用在每个文件扩展名上)。我可以仅对JPEG文件使用以下内容吗? jpg="" count=`ls -1 *.jpg 2>/dev/null | wc -l` if [ $count != 0 ] then echo jpg files found: $count ; jpg="yes" fi 考虑到文件扩展名jpg,png,bmp,raw和其他,我应该使用while循环来做到这一点吗?

5
如何使用Linux Date命令解析ISO8601日期
我正在尝试使用date命令来生成date命令本身可以解释的文件时间戳。但是,date命令似乎不喜欢它自己的输出,并且我不确定如何解决此问题。例子: sh-4.2$ date Fri Jan 3 14:22:19 PST 2014 sh-4.2$ date +%Y%m%dT%H%M 20140103T1422 sh-4.2$ date -d "20140103T1422" Thu Jan 2 23:22:00 PST 2014 date似乎在解释字符串,偏移量为15小时。有任何已知的解决方法吗? 编辑:这不是显示问题: sh-4.2$ date +%s 1388791096 sh-4.2$ date +%Y%m%dT%H%M 20140103T1518 sh-4.2$ date -d 20140103T1518 +%s 1388737080 sh-4.2$ python Python 3.3.3 (default, Nov 26 2013, 13:33:18) [GCC 4.8.2] …


3
何时在Shell脚本中使用重定向到stderr
我知道行为良好的实用程序,例如grep,会将“正常”消息输出到stdout,将错误消息输出到stderr。 $ grep '^foo' file1 file2 file1:foo grep: file2: No such file or directory 当我自己编写shell脚本时,我经常发现很难决定应该在stderr上显示什么输出和哪些消息,或者是否应该打扰。 我想了解一种良好的做法:什么时候将某些消息重定向到stderr是合理的,什么时候不可行? 当然,“取决于情况”,但是您是否有一些见解可以帮助我做出这些决定? 为了使这个主观问题适合格式,我想鼓励回答“为什么”的答案,并以经验为基础,并在可能的情况下以事实为依据。

4
鞭尾或对话
我将创建使用用户输入的脚本,因此我决定使用whiptail,但是有点混淆了哪一种是可移植的并且可以在ubuntu 10.x和更高版本以及CentOs5.x和更高版本中工作。 我知道read,但是我想要像工具一样的对话框,所以如果有人知道任何替代方法,就让我知道。

4
使用bash脚本获取控制台宽度
我遇到一个试图通过使用脚本来获取终端大小的问题。通常,我会tput cols在控制台内使用该命令,但是我希望能够通过严格使用脚本来完成此功能。 到目前为止,我能够检测正在运行的控制台并获取其文件路径。但是,我正在努力使用此信息来获取控制台的宽度。我尝试使用命令tput,但是我对Linux /脚本是相当陌生的,因此并不真正知道该怎么做。 这样做的原因是我希望能够设置一个cron条目,每隔一段时间就通知控制台其宽度/列。 到目前为止,这是我的代码: tty.sh #!/bin/bash #Get PID of terminal #terminal.txt holds most recent PID of console in use value=$(</home/test/Documents/terminal.txt) #Get tty using the PID from terminal.txt TERMINAL="$(ps h -p $value -o tty)" echo $TERMINAL #Use tty to get full filepath for terminal in use TERMINALPATH=/dev/$TERMINAL echo $TERMINALPATH …

5
获取字符串显示宽度
从外壳脚本获取一串字符的显示宽度(至少在一个终端上(至少一个以正确的宽度显示当前语言环境中的字符的显示终端))的最接近可移植的方式。 我主要对非控制字符的宽度感兴趣,但是也欢迎考虑诸如退格键,回车符,水平制表符之类的控制字符的解决方案。 换句话说,我正在寻找围绕POSIX函数的Shell API wcswidth()。 该命令应返回: $ that-command 'unix' # 4 fullwidth characters 8 $ that-command 'Stéphane' # 9 characters, one of which zero-width 8 $ that-command 'もで 諤奯ゞ' # 5 double-width Japanese characters and a space 11 人们可以使用ksh93的printf '%<n>Ls',考虑到用于填充字符宽度<n>列,或col命令(例如printf '++%s\b\b--\n' <character> | col -b),试图推导出,有一个文本:: CharWidth perl模块至少,但是否有更直接的或便携式的方法。 这或多或少是关于另一个问题的后续问题,该问题是关于在屏幕右侧显示文本,在显示文本之前您需要具有该信息。

2
在bash shell中的for循环内连接字符串变量
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加细节并通过编辑此帖子来澄清问题。 6年前关闭。 #!/bin/bash names= find /home/devuser -name 'BI*' echo $names for name in {names[@]} do echo $name $var = $var$name done echo $var

3
Shell脚本-意外令牌'else'附近的语法错误
使用以下shell脚本,为什么我会出错 syntax error near unexpected token `else' Shell脚本 echo "please enter username" read user_name echo "please enter password" read -s pass echo ${ORACLE_SID} SID=${ORACLE_SID} if ["${ORACLE_SID}" != 'Test'] then sqlplus -s -l $USER_NAME/$PASS@$SID <<EOF copy from scott/tiger@orcl insert EMP using select * from EMP exit EOF else echo "Cannot copy" …

4
如何使bash在语法错误时中止脚本的执行?
为了安全起见,如果脚本遇到语法错误,我希望bash中止脚本的执行。 令我惊讶的是,我无法实现这一目标。(set -e还不够。)示例: #!/bin/bash # Do exit on any error: set -e readonly a=(1 2) # A syntax error is here: if (( "${a[#]}" == 2 )); then echo ok else echo not ok fi echo status $? echo 'Bad: has not aborted execution on syntax error!' 结果(bash-3.2.39或bash-3.2.51): $ ./sh-on-syntax-err …

4
下面声明的调用函数
是否可以调用下面在bash中声明的函数? 例 if [ "$input" = "yes" ]; then YES_FUNCTION elif [ "$input" = "no" ]; then NO_FUNCTION else exit 0; fi YES_FUNCTION() { ..... ..... } NO_FUNCTION() { ..... ..... }

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.