小编Ini*_*ian的帖子

警告:无法使用参数启动程序。警告:Exec 格式错误

您好,我正在尝试在 opensuse 中创建一个 Shell 脚本来创建 MySqlUsers,但是当我尝试运行它时,出现此错误:

警告:无法使用参数“/home/thomas/Scripts/MySqlCreateUser.sh”启动程序“/home/thomas/Scripts/MySqlCreateUser.sh”。

警告:Exec 格式错误

知道我能做什么吗?

linux bash shell sh opensuse

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

如何在 bash 脚本中与进度在同一行中打印

我想按以下方式打印文本

Waiting for completion.
Waiting for completion..
Waiting for completion...
Run Code Online (Sandbox Code Playgroud)

[注:不超过三个点]

上面应该在同一行并且在一个循环中。

当循环条件为假时,我也想在同一行中得到以下内容:

Waiting for completion... [OK]
Run Code Online (Sandbox Code Playgroud)

我如何在 bash 脚本中实现这一目标?

bash

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

将环境变量传递给进程

我刚刚遇到了这个代码片段:

$ DEVELOPMENT=1 node dev-mode.js
Run Code Online (Sandbox Code Playgroud)

这一行运行 node.js 程序并设置环境变量DEVELOPMENT。我不明白设置 env 变量的机制是什么?这是有效的语法:

$ [var1=value1 var2=value2] [process_name process_params] ?
Run Code Online (Sandbox Code Playgroud)

bash shell node.js

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

jq - 使用参数构造选择器

我想知道是否可以使用参数来构造字段名称jq.

例:

jq -rc \
   --arg secret_name ${secret_name} \
   --arg secret_value ${secret_value} \
   '.data.$secret_name = "$secret_value"'
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想使用参数值secret_name来创建一个键.data.这可能用jq吗?

示例数据:

secret_name=abc  
secret_value=xyz 
Run Code Online (Sandbox Code Playgroud)

jq运行JSON :

{
    "apiVersion": "v1",
    "data": {},
    "kind": "Secret",
    "metadata": {
        "name": "kv-secrets",
        "namespace": "default"
    },
    "type": "Opaque"
} 
Run Code Online (Sandbox Code Playgroud)

预期产量:

{
    "apiVersion": "v1",
    "data": {
      "abc": "xyz"
    },
    "kind": "Secret",
    "metadata": {
        "name": "secrets"
    },
    "type": "Opaque"
}
Run Code Online (Sandbox Code Playgroud)

请记住,我打算运行原始命令来填充.data更多的键值对.

bash jq

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

Awk求和是在没有浮点精度的情况下进行的

我有一个file.txt,我试图总结第四和第五列的值:

^20170821^3007030^153^863.53^0.42^
^20170821^1402675^110^581.36^0.37^
^20170821^1404785^24^155.29^0.29^
^20170821^1406505^40^210.51^0.00^
^20170821^1005^1^18.00^0.00^
^20170821^9657^7^7.28^0.00^
^20170821^143646^86^486.59^0.08^
^20170821^342657^3^12.60^0.00^
^20170821^1006^4^7.04^0.04^
^20170821^1004^1215^3502.44^12.09^
^20170821^1007^932^6689.64^15.07^
^20170821^378228^1^2.80^0.00^
^20170821^704797^4^23.80^0.00^
^20170821^705642^2^9.80^0.00^
^20170821^703689^7^40.60^0.00^
^20170821^148340^75^382.81^0.20^
^20170821^257^2^5.60^0.00^
^20170821^3702^1^2.80^0.00^
^20170821^3703^1^7.00^0.00^
^20170821^258^1^7.00^0.00^
^20170821^920299^11^60.20^0.00^
^20170821^210705^2^14.00^0.00^
^20170821^867693^12^65.88^0.08^
^20170821^2635085^6^33.60^0.00^
^20170821^13211^140^409.18^0.58^
^20170821^64^2^14.00^0.00^
^20170821^13214^234^1685.91^1.26^
^20170821^13212^2^34.90^0.00^
^20170821^13213^2^2.80^0.00^
^20170821^18385^8^7.28^0.00^


 $awk -F '^' '{sum += $5} END {print sum}' file.txt
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:15344.2

 $awk -F '^' '{sum += $6} END {print sum}' file.txt
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:30.48

然后我在Excel中检查了结果.事实证明,awk的添加在第一次添加时是错误的.缺少0.04.

在此输入图像描述

如何正确地对列进行求和?

bash awk sum

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

将换行符(LF)/换行符作为参数传递给bash

如何在包含LF字符的Bash CLI中传递参数?就像是:myprog foo\nbar

我试过这个:

myprog `printf 'foo\nbar'`
myprog foo\nbar
Run Code Online (Sandbox Code Playgroud)

我使用这个bash程序来测试结果:

#myprog
echo $*
Run Code Online (Sandbox Code Playgroud)

和node.js程序

#!/usr/bin/env node
console.log(process.argv[2])
Run Code Online (Sandbox Code Playgroud)

这是行不通的.

bash shell

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

使用while循环迭代参数列表会进行无限循环

我将一些日期参数放入脚本中

#!/bin/bash
set -x
today=$(date +%Y%m%d)
while  [ ! $# -eq 0 ] #while number of arguments is NOT zero, do this
    do
    if     [[ "$1" = "--test" ]] || [[ "$1" = "-t" ]] ;     then
            today=$(date +%Y%m%d).test
    elif  [[ "$1" = "--yesterday" ]]  || [[ "$1" =  "-y" ]] ; then
            DOW=$(date +%u)
            if [[ "$DOW" =  "1" ]] ; then
                today=$(date --date="3 days ago" +%Y%m%d)
            else
                today=$(date -d "yesterday 13:00" +%Y%m%d)
            fi
    fi
done

echo "$today"
exit …
Run Code Online (Sandbox Code Playgroud)

bash shell

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

jq解析中如何使用环境变量参数

在下面的 bash 代码中,我得到 null 作为值而不是实际值。我jq 1.5在Linux操作系统中使用。

getProperty(){
    export PROP=$1
    export value_found=`cat my.json | jq '."env.PROP"'`
    echo "$1 = $value_found"
}

getProperty "first.name"
getProperty "last.name"
Run Code Online (Sandbox Code Playgroud)

内容my.json

{"first.name":"Adam", "last.name":"Eve"}
Run Code Online (Sandbox Code Playgroud)

我的程序需要获取随机选择的属性的值,因此在运行之前不知道属性名称(因此尝试使用参数的原因)

bash jq

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

gsed是否有相对的案例说明符?

sed命令中不区分大小写的替换指示符本身似乎不区分大小写。将i / I附加到sed语句似乎会产生相同的结果。

echo a | gsed ’s_A_Z_i’
Run Code Online (Sandbox Code Playgroud)

返回:Z

echo a | gsed ’s_A_Z_I’
Run Code Online (Sandbox Code Playgroud)

还返回:Z

echo A | gsed ’s_A_z_I’
Run Code Online (Sandbox Code Playgroud)

返回:z

echo A | gsed ’s_a_Z_i’
Run Code Online (Sandbox Code Playgroud)

返回:Z

gsed返回特定于案例的替代文本。

是否存在一种紧凑的方式来指定不区分大小写的搜索,并在与查找匹配的大小写匹配的情况下进行替换?(将a替换为z,将A替换为Z)

当然,可以通过两个命令解决问题,但我正在寻找更紧凑的东西。

其次,i / I后缀的效果是否有所不同?(不是-i标志)

这与[上一个问题](如何在Mac OS X上使用GNU sed)不同,但与之不同!在标准自制软件安装后,在OSX中使用gnu-sed的问题。

我没有特定的应用程序。我正在学习OSX上gnu-sed的一些复杂之处,并且想知道它如何处理大小写。

macos homebrew gnu sed

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

UNIX:从带分隔符的文本文件创建表格格式的输出

我需要从文本文件中获取表格格式输出,我正在通过以下 awk 命令实现它。

分隔文件

ACTIVE#1238917238971238#USA#The U.S. is a country of 50 states covering a vast swath of North America.
ACTIVE#21389721839781237812#INDIA#India, officially the Republic of India, is a country in South Asia.
ACTIVE#3121278372183782137812#AUSTRALIA#Australia, officially the Commonwealth of Australia, is a sovereign country comprising the mainland of the Australian continent
Run Code Online (Sandbox Code Playgroud)

AWK 命令

awk -F"#" 'BEGIN {{printf "%-80s\n","--------------------------------------------------------------------------------------------------------------------------------------"} {printf "|%-12s|%-30s|%-38s|%-50s|\n","STATUS","ID", "Country", "Description"} {printf "%-80s\n","--------------------------------------------------------------------------------------------------------------------------------------"}} {printf "|%-12s|%-30s|%-38s|%-50s|\n",$1,$2,$3,$4} END{printf "%-80s\n","--------------------------------------------------------------------------------------------------------------------------------------"}' /tmp/test.txt
Run Code Online (Sandbox Code Playgroud)

输出: 在此处输入图片说明

如果您可以看到 Description 列的输出,则它不会在其自己的列中格式化输出,而是由于字符串长度而弄乱了整个表。

有人可以查看并建议我如何更好地显示说明列的输出吗?

unix shell awk

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

标签 统计

bash ×8

shell ×5

awk ×2

jq ×2

gnu ×1

homebrew ×1

linux ×1

macos ×1

node.js ×1

opensuse ×1

sed ×1

sh ×1

sum ×1

unix ×1