相关疑难解决方法(0)

为什么一个变量对多个值的非等式检查总是返回true?

我的程序中有一个变量v,它可以从值集中获取任何

"a", "b", "c", ..., "z"
Run Code Online (Sandbox Code Playgroud)

而我的目标是只有当执行一些说法v是不"x","y""z".

我试过了,

language-agnostic if-statement multiple-languages control-flow

18
推荐指数
2
解决办法
916
查看次数

将"test"的结果分配给变量

我正在编写一个脚本,我需要在几个地方使用文件测试的输出,包括shell函数内部.我想将文件存在分配给shell变量,如下所示:file_exists=[ -f $myfile ].

为了确保我已经覆盖了我的基础,我首先触摸一个文件,并测试它的存在:

file='a'
touch $file
if [ -f $file ]
then
    echo "1 -- '$file' exists"
fi
Run Code Online (Sandbox Code Playgroud)

输出:

1 -- 'a' exists
Run Code Online (Sandbox Code Playgroud)

该文件已成功创建 - 没有惊喜,但至少我知道我没有处理任何权限问题或任何事情.

接下来我测试以确保我可以在变量中存储布尔表达式:

mytest=/bin/true

if $mytest
then
    echo "2 -- \$mytest is true"
fi
Run Code Online (Sandbox Code Playgroud)

输出:

2 -- $mytest is true
Run Code Online (Sandbox Code Playgroud)

所以,我已经掌握了一些基本覆盖-条件表达式应该发出相同的输出/bin/true/bin/false...但是这不是我所看到的:

mytest=[ -f $file ]
if $mytest
then
    echo "3 -- \$mytest is true [expect true]"
else
    echo "3 -- \$mytest is false [expect true]"
fi
Run Code Online (Sandbox Code Playgroud)

此操作失败,并显示以下错误:

-f: …
Run Code Online (Sandbox Code Playgroud)

bash

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

如何在Bourne shell中回显多行字符串

我想创建一些脚本来填充一些模板并将它们插入到我的项目文件夹中.我想为此使用shell脚本,模板非常小,所以我想将它们嵌入到shell脚本中.问题是echo似乎忽略了我的字符串中的换行符.要么是这样,要么字符串不包含开头的换行符.这是一个例子:

MY_STRING="
Hello, world! This
Is
A
Multi lined
String."

echo -e $MY_STRING
Run Code Online (Sandbox Code Playgroud)

这输出:

Hello, world! This Is A Multi lined String.

我假设echo是罪魁祸首.我怎样才能让它确认换行符?

sh multiline echo

12
推荐指数
2
解决办法
2万
查看次数

bash的字符串长度

我写这个是为了找到字符串的长度,但它没有显示字符串的长度.

我写的东西有问题吗?我只是bash的初学者.

Str=abcdefghj

echo "Str is:" `expr length $Str` "characters long"
Run Code Online (Sandbox Code Playgroud)

bash shell

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

如何在 gitlab-ci.yml 文件的“脚本”部分设置变量

我正在尝试根据提交源自的分支为我的 GitLab Runner 设置一个环境变量。

我有 4 个 kubernetes 集群:staging、integration、production 和 qa。本质上,我想根据我推送到的分支将我的应用程序部署到正确的集群。

image: google/cloud-sdk:latest
variables:
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
services:
  - docker:dind
before_script:
  - docker info
stages:
  - publish
publish:
stage: publish
script:
  - if [ "$CI_COMMIT_REF_NAME" = "master" ]; then $ENVIRONMENT="production"; else $ENVIRONMENT="$CI_COMMIT_REF_NAME"; fi
  - echo $ENVIRONMENT
   .
   .
   .
  - kubectl apply -f cfg/${ENVIRONMENT}/web-deployment.yaml
only:
 - master
 - integration
 - qa
 - staging
Run Code Online (Sandbox Code Playgroud)

每当我使用不同形式的 if 语句运行脚本时,都会出现以下错误:

/bin/bash: line 83: =integration: command not found
ERROR: Job failed: exit code 1 …
Run Code Online (Sandbox Code Playgroud)

continuous-integration yaml gitlab

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

安装没有root的Python 2.7

我尝试在远程linux机器上安装没有root的Python 2.7.我跑了命令

./configure prefix=/  
make install DESTDIR=/xxx/yyy/ 
Run Code Online (Sandbox Code Playgroud)

其中/ xxx/yyy /是我具有读写访问权限的目录.

我最后碰到了一个问题.它说:

使用gdbm INFO构建dbm:找不到Tcl/Tk库和/或头文件

Python构建完成,但找不到构建这些模块的必要位:_tkinter bsddb185 dl imageop sunaudiodev要查找必要的位,请在detect_modules()中的setup.py中查找模块的名称.

运行build_scripts运行install_lib创建/lib/python2.7错误:无法创建'/lib/python2.7':权限被拒绝

我是否在没有root访问权限的情况下安装了正确的步骤?(即我的configure和make命令?)任何人都可以告诉我为什么它不能正确安装?

谢谢,
ktm

python linux

10
推荐指数
2
解决办法
2万
查看次数

如何检查数字是否在shell范围内

我想在两个值之间插入数字,否则重复脚本直到正确的数字.

这是我的脚本,它无法正常工作:

validation(){
read number
if [ $number -ge 2 && $number -ls 5 ]; then
    echo "valid number"
    break
else
    echo "not valid number, try again"
fi

}

echo "insert number"
validation
echo "your number is" $number
Run Code Online (Sandbox Code Playgroud)

bash shell sh

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

在 Bash 中检查 sudo(带有 if 语句的脚本)

我使用 bash 的时间不超过 6 个小时,现在我正在尝试创建一个菜单,让您可以做一些“有趣”的事情:D。

我的问题是if 语句检查您是否处于 sudo 模式。我想有3个条件:

  1. 如果我以sudo模式执行脚本,我将能够输入要复制的文件夹的路径。
  2. 如果我在没有 sudo 模式的情况下执行脚本,它会要求我插入密码,如果我这样做正确,脚本将向我显示echoread op,允许我写入要复制的文件夹的路径。
  3. 与第 2 点相同,但如果我的身份验证失败,应用程序将自动关闭。

创建副本

2)
    if [ "$EUID" -ne 1 ]
      then 
            echo "Checking if you are in sudo mode..."
            echo "Error, please insert your password:"
            sudo ls /root
            if [ "$EUID" -ne 1 ]
                then
                    echo -e "\nCould not authenticate the user."
                    echo -e "For security reasons the application will be closed."
                    exit    
            else
                echo "==============================================================="
                echo -e "ALL …
Run Code Online (Sandbox Code Playgroud)

linux bash sudo if-statement su

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

Bash - 如何使用printf打印多行字符串(使用'\n')

我正试图以printf这种方式打印多行字符串

printf "hi\n"
printf "next line here\n"
Run Code Online (Sandbox Code Playgroud)

我做不到以下事情

text_content="
hi
next line here
"

printf $text_content
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?

unix linux bash shell

7
推荐指数
2
解决办法
5807
查看次数

bash 字符串带引号和不带引号有什么区别

在 Bash 脚本中将字符串内容放在引号中是否重要?考虑以下两个变量:

str1=hei
str2="Hi"
Run Code Online (Sandbox Code Playgroud)

bash 中首选上述哪种定义字符串文字的方法?为什么?

string bash

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