相关疑难解决方法(0)

Shell Script 中 -n、-z、-x、-L、-d 等的含义是什么?

我经常.sh在条件 sintaxis 中的文件Shell Script 中找到这样的:

if [ -n "condition" ]; then ...
if [ -z "condition "]; then ...
if [ -x "condition" ]; then ...
if [ -L "condition" ]; then ...
if [ -d "condition" ]; then ...
Run Code Online (Sandbox Code Playgroud)

这些 -n, -z, -x, -L, -d是函数或者它是如何命名的,它的目的是什么?

linux bash shell

5
推荐指数
1
解决办法
1831
查看次数

最简单的C++/C#/ Java程序员的Shell


我对bash编程有点挣扎,因为我似乎不理解语法规则.例如:

read confirm
if [ "$confirm" == "yes" ]; then
    echo "Thank you for saying yes"
else
    echo "Why did you say no?"
fi
Run Code Online (Sandbox Code Playgroud)

在此代码中,您可以使用许多表单来执行相同的操作:

"$confirm" == "yes"
$confirm == "yes"
"$confirm" == yes
$confirm == yes
Run Code Online (Sandbox Code Playgroud)

那么规则是什么?除此之外,它非常严格,所以如果你在'['和'''之间没有空格的情况下编写上面的if语句,你就会收到错误.所以我的问题是:

  1. 谁能让我对shell脚本中的'基本'语法规则有所了解?如果你愿意,你可以把它称为语法.
  2. 据我所知,有三种不同的shell编程脚本.对于像C++,C#和Java这样的语言程序员来说,哪一个最容易学习?

此致,
拉菲德

unix linux shell

4
推荐指数
1
解决办法
824
查看次数

git状态前或状态后钩子

我想运行棉绒git status,然而似乎没有什么pre-status也不post-status钩。一个人怎么能给git加个钩子呢?精细的文档对此事可疑的沉默!

我目前正在git status用Lash脚本包装短绒,但是我更喜欢支持我的肌肉记忆宏的解决方案git status。如果重要的话,我正在使用KDE 4运行CentOS 7.3。

git bash hook

4
推荐指数
1
解决办法
708
查看次数

关于bash文件的混淆存在测试操作员

以下内容不返回任何内容:

which asdf
Run Code Online (Sandbox Code Playgroud)

那么,为什么在这里触发if语句呢?

x=$(which asdf)
if [ -f $x ]; then echo "exists"; fi
Run Code Online (Sandbox Code Playgroud)

bash

3
推荐指数
1
解决办法
49
查看次数

crontab 中的方括号和 -x

我正在尝试向 crontab 添加一个新条目,我遇到的问题是所有其他条目都是这样编写的:

0 0 * * * [ -x /home/test/test_reports/nightly ] && /home/test/test_reports/nightly
Run Code Online (Sandbox Code Playgroud)

的目的是[ -x /home/test/test_reports/nightly ]什么?

我试图谷歌它但没有运气..

linux cron

2
推荐指数
1
解决办法
1483
查看次数

Zsh 返回 `<function>:<linenumber> = not found`

我使用了在单独的脚本中定义的以下 tmux 快捷函数并设置了别名,它运行良好但很混乱。我决定将它移到.zshrc它自然属于我的地方,但遇到了一个我无法弄清楚的问题。

function t () {re='^[0-9]+$'
if [ "$1" == "kill" ]
then
        tmux kill-session -t $2
elif [[ "$1" =~ "$re" ]]
then
        tmux attach-session -d -t $1
fi}
Run Code Online (Sandbox Code Playgroud)

我获取 my .zshrc,调用该函数,然后得到:

t:1: = not found
Run Code Online (Sandbox Code Playgroud)

我知道函数是这样定义的:

??bennett@Io [~] using
??? which t
t () {
    re='^[0-9]+$'
    if [ "$1" == "kill" ]
    then
            tmux kill-session -t $2
    elif [[ "$1" =~ "$re" ]]
    then
            tmux attach-session -d -t $1
    fi
}
Run Code Online (Sandbox Code Playgroud)

我假设这是在抱怨函数的第一行。我试过将函数的第一行向下移动几行,除了错误消息所指的那一行之外,它不会改变任何东西。有什么线索吗?我在 SO 上没有找到与此特定问题相关的任何内容。

zsh

2
推荐指数
1
解决办法
790
查看次数

bash:计算文件数量和比较时出错

我是bash脚本的新手.我想比较一下我在另一个目录中使用的文件数量ls.然后我需要将那里的文件数量与我拥有的变量进行比较.

if [ (cd reports_dir/ && ls) | wc  -gt $MAXIMUM_REPORTS ]; then
    echo hello
fi
Run Code Online (Sandbox Code Playgroud)

此代码提供错误:

./monitor.sh: line 70: syntax error near unexpected token `cd'
./monitor.sh: line 70: `    if [(cd reports_dir/ && ls) | wc  -gt $MAXIMUM_REPORTS]; then'
Run Code Online (Sandbox Code Playgroud)

我知道为什么cd会出乎意料.(cd reports_dir/ && ls) | wc当我在终端中运行它时,该命令有效.

此命令将在while循环中运行,因此将重复调用它.因此,我实际上无法进入目录,因为它尝试cd多次,导致错误.

bash

1
推荐指数
1
解决办法
96
查看次数

表达式返回0时如何退出循环?

我有这个:

while [ "ps aux | grep '[0]:00 Xvfb :99 -screen 0 1024x768x16'" ]
do 
    echo "sleep"
    ps aux | grep "[0]:00 Xvfb :99 -screen 0 1024x768x16"
    sleep 1
done
Run Code Online (Sandbox Code Playgroud)

这给了我:

sleep
sleep
sleep
sleep
sleep
sleep
root         7  0.5  1.5 207336 31620 ?        Sl   09:31   0:00 Xvfb :99 -screen 0 1024x768x16
sleep
root         7  0.4  1.5 207336 31620 ?        Sl   09:31   0:00 Xvfb :99 -screen 0 1024x768x16
sleep
root         7  0.3  1.5 207336 31620 ?        Sl   09:31   0:00 Xvfb …
Run Code Online (Sandbox Code Playgroud)

bash

1
推荐指数
1
解决办法
37
查看次数

显示在sh脚本结尾的手册页

我似乎在编写一段代码时遇到了麻烦(至少我认为无论如何).这是一个脚本,它解析一个名为test3_data.txt的文本文件,其中包含一堆用户ID,并将这些用户ID放入一个名为"USER_ID"的变量中.然后我测试它们是否有一个主目录,其中包含USER_ID变量中的任何文本.如果是这样,它将从系统中删除用户及其文件,主目录等.该脚本工作正常,但是当它完成运行时,userdel命令的手册页会显示出来.反正有没有阻止这种情况发生?我的代码有问题吗?谢谢!这是我的代码.

!/bin/sh

while read IN_RECORD
do


#Variable that reads user id

USER_ID=`echo $IN_RECORD |cut -d'|' -f1`

#Remove added users from data file.

test -d /home/{$USER_ID}

if [ "$?" = "1" ];
then
userdel -r $USER_ID
fi

done < test3_data.txt
Run Code Online (Sandbox Code Playgroud)

bash shell manpage

0
推荐指数
1
解决办法
87
查看次数

标签 统计

bash ×6

linux ×3

shell ×3

cron ×1

git ×1

hook ×1

manpage ×1

unix ×1

zsh ×1