AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-1080948

Christian Hick's questions

Martin Hope
Christian Hick
Asked: 2020-09-08 13:53:48 +0800 CST

R“RPostgrSQL”包无法在 Centos 8 上安装(因为 `lib` 未指定)

  • 5

我想安装 R 包 RPostgresql 以连接到我在 Centos 8 上名为“crex”的 PostgreSQL 数据库。当我运行

> install.packages("RPostgreSQL")

在终端中,我收到以下错误:

Installing package into ‘/usr/lib64/R/library’
(as ‘lib’ is unspecified)
Warning in install.packages("RPostgreSQL") :
  'lib = "/usr/lib64/R/library"' is not writable
Would you like to use a personal library instead? (yes/No/cancel)

从我收集到的消息中,我需要设置一个个人库,但我不确定其含义。我要做的是运行 ar 脚本,例如 new.r,它将从另一个 bash 脚本中调用。

新的.r:

require("RPostgreSQL")

pw <- {
  "XXXX"
}

drv <- dbDriver("PostgreSQL")

con <- dbConnect(drv, dbname = "crex",
                 host = "localhost", port = 5432,
                 user = "postgres", password = pw)
rm(pw) 

dbExistsTable(con, "work")
#other commands

Bash 脚本 b.txt:

#!/bin/bash

Rscript new.r
#other commands

有人可以帮忙吗?

linux bash
  • 1 个回答
  • 91 Views
Martin Hope
Christian Hick
Asked: 2020-08-30 15:57:02 +0800 CST

如何从案例语句中的案例循环回原始选择菜单?

  • 8

我有以下名为 q.txt 的 bash 脚本。我想用 case 语句运行 select 语句。a)案例运行后如何重新显示菜单选项。以防万一. /home/chh1/q.txt不会追。echo "a"a)

我很清楚为什么这不起作用,但有没有办法在案例执行后循环回到原始选择菜单?

#!/bin/bash

select x in a b c d

do

case $x in
        a) echo "a"
           . /home/chh1/q.txt;;
        b) echo "b";;
        c) echo "c";;
        d) echo "You are now exiting the program"
           break;;
        *) echo "Invalid entry. Please try an option on display";;

esac

done
bash
  • 1 个回答
  • 1318 Views
Martin Hope
Christian Hick
Asked: 2020-08-17 21:58:42 +0800 CST

如何有效地将 bash 变量拆分为两个变量

  • 5

我有一个变量 $b,我想将它分成两个变量 $startt 和 $finisht。

#!/bin/bash

b='08:10:00','11:12:00'

b=$(echo "$b" | tr -d "'")

IFS=',' read -r _ startt finisht _ <<<"$b"

echo "$startt"
echo "$finisht"

以下是所需的输出。开始 = 08:10:00 和结束 = 11:12:00。但是,当我运行此脚本时,我只得到 11:12:00。我想尽可能有效地拆分变量。任何人都可以帮忙吗?

bash
  • 1 个回答
  • 42 Views
Martin Hope
Christian Hick
Asked: 2020-07-28 17:57:43 +0800 CST

在 BASH 脚本中选择导入的变量

  • 5

我有三个 bash 脚本。w.txt、t.txt 和 d.txt。

w.txt:

#!/bin/bash

wtimes=( 8:20 9:30 10:11 )
wtimef=( 10:10 11:20 13:30 )

echo $wtimes >> d.txt

t.txt

#!/bin/bash

. ./w.txt

echo "${wtimes[1]}"
echo "${wtimef[1]}"

我正在尝试运行 t.txt,这样我就可以在 t.txt 中使用数组变量 $wtimes 和 $wtimef 而无需运行echo $wtimes >> d.txt. 这非常简单,实际上 w.txt 中还有很多我不想在 t.txt 中执行的命令。我怎么能在这里有选择性?有人可以帮忙吗?

bash bash-scripting
  • 1 个回答
  • 43 Views
Martin Hope
Christian Hick
Asked: 2020-07-20 14:36:13 +0800 CST

Bash:如何消除循环生成的变量末尾的逗号

  • 5

我有以下 bash 脚本,它在同一行输出两个随机数。

#!/bin/bash

for i in 1 2; do
   unset var
   until [ "$var" -lt 10000 ] 2>/dev/null; do
      var="$RANDOM"
done
printf "%s," "${var/%,/}"
done

输出是:

5751,2129,

我试图摆脱我尝试过的逗号,$var以便"${var/%,/}"$var = 5751,2129 的输出可以使用。有人能帮忙吗?

bash
  • 1 个回答
  • 1688 Views
Martin Hope
Christian Hick
Asked: 2020-07-16 19:59:55 +0800 CST

带有 for 循环和嵌套 if 语句的 Bash 函数给出了特殊的结果

  • 5

我有以下 bash 功能,让我很困惑。如果我在 zenity 框中输入以下内容...

员工 ID = 2 类别 ID = 3

我得到以下信息:2 3

如果...

员工 ID = 类别 ID = 3

在第二个 zenity 窗口打开后,我输入 2 并得到以下信息:2 3

但是,当我进入

员工 ID = 2 类别 ID =

没有额外的 Zenity 窗口打开,我得到以下信息:2

在测试运行后,我真正想要的结果是 2,3。

有谁知道这里有什么问题?

#!/bin/bash


num(){
        emp=$(echo "$1" | awk -F, -v  OFS=, '{print $1 "," $2}')

        IFS=, read -ra array1 <<<"$emp"
        
        p=$(for i in "${array1[@]}"
        
        do
                
                if [[ "${i}" =~ ^[0-9]+$ ]]; then

                        out="${i}"
                elif
                        [[ "${i}" = NULL ]]; then

                        out="${i}"


                else   local var2

                        until [[ ${var2} =~ ^[0-9]+$ ]] || [[ ${var2} = NULL ]]; do

                                var2="$(zenity --forms --title="table salaries_wages" --text "Add a number"  --separator="," \
                                --add-entry="WARNING! You either forgot to enter or didn't enter a number. Please enter a valid number: ")"

                         done

                                out="${var2}"

        fi

        echo "$out"
        
done)
      
        echo "$p"
}

input="$(zenity --forms --title="table salaries_wages" --text="Add a new salaries_wages entry" --separator="," \
        --add-entry="ENTER employeeid: " \
        --add-entry="ENTER categoryid: ")"

num "$input"

bash bash-scripting
  • 1 个回答
  • 100 Views
Martin Hope
Christian Hick
Asked: 2020-07-13 15:48:16 +0800 CST

Bash 脚本案例语句,包括未表现的测试条件

  • 5

我有一个有点冗长的脚本(主脚本)。我会把它都包括在这里,因为我相信它可能与答案有关,所以请不要讨厌我。此脚本中的所有内容都有效。我唯一苦苦挣扎的是 case *www1) 和 *www2) 接近尾声,它们基本上是相同的。NULL 测试有效,输入到 Zentiy 框中的数据在这些情况下得到了正确处理。但是,如果我在相应的 Zenity 字段(invoice_number & note)中没有输入任何内容,则会else until [[ -n "${var2}" ]]; do...被忽略。在脚本的末尾,我包含了另一个更简化的脚本,仅针对所讨论的案例(简化)。当我运行它时没有问题,一切都按预期工作。这个案子只是从原件复制过来的,所以我很想知道为什么一个有效,而另一个无效。有人愿意为此提供帮助吗?

主脚本:

#!/bin/bash


work_number="$(zenity --entry --text "ENTER number of work/job entries:" --entry-text "1")"
        a=1

until
        [[ $work_number -lt $a ]]
do

input="$(zenity --forms --title="table work" --text="Add a new job" --separator="," \
       --add-entry="ENTER clientid: " \
       --add-entry="ENTER job_start, -t time without time zone, e.g. '11:45:00', seconds allways zero: " \
       --add-entry="ENTER job_finish, -t time without time zone, e.g. '11:45:00', seconds allways zero: " \
       --add-entry="ENTER number_catchers, -t numeric, must be 0 if no waste has been collected or NULL if it has yet to be assigned to a tip run: " \
       --add-entry="ENTER mower_front, -t numeric:" \
       --add-entry="ENTER mower_back, -t numeric: " \
       --add-entry="ENTER categoryid: " \
       --add-entry="ENTER price, -t numeric: " \
       --add-entry="ENTER invoice_number, -t text: " \
       --add-entry="ENTER note, -t text: " \
       --add-entry="ENTER a tip_runid, -t integer: ")"

psql -tA -U chh1 -d crewdb -c "SELECT SETVAL('work_workid_seq', (SELECT MAX(workid) FROM work), true);" >/dev/null 2>&1
dlink="$(psql -tA -U chh1 -d crewdb -c "SELECT MAX(date_linkid) FROM date_link;")"

startt="$(echo "$input" | awk -F, -v  OFS=, '{print $2}')"
finisht="$(echo "$input" | awk -F, -v  OFS=, '{print $3}')"

st="$( date --date="$startt" +%s  2>/dev/null )"
ft="$( date --date="$finisht" +%s 2>/dev/null )"

if [ -n "$st" -a "$ft" ] ; then

    startt="$(date +%H:%M  -d "$startt"  )"
    finisht="$(date +%H:%M -d "$finisht" )"
    tzdiff="$(( ft - st ))"
else
    tzdiff=0
fi

while [[  ( ( ! "$startt"   =~ ^[0-1][0-9]:[0-5][0-9]$ ) && ( ! "$startt"  =~ ^[0-2][0-3]:[0-5][0-9]$ ) ) ||
          ( ( ! "$finisht"  =~ ^[0-1][0-9]:[0-5][0-9]$ ) && ( ! "$finisht" =~ ^[0-2][0-3]:[0-5][0-9]$ ) ) ||
          ( "$tzdiff" -le 0 )  ]];
do
    var2="$(zenity --forms --title="job start time and/or job finish time are incorrect" --text "Add a job start time and finish_time"  --separator="," \
                   --add-entry="WARNING! Something went wrong. Please enter a valid job start time, e.g. 8:20: " \
                   --add-entry="WARNING! Something went wrong. Please enter a valid job finish time, e.g. 12:30: ")"
    tzdiff=0

    if [ -n "$var2" ] ; then
       b1=$(echo "$var2" | cut -d, -f1 )
       b2=$(echo "$var2" | cut -d, -f2 )

       if [ -n "$b1" -a -n "$b2"  ] ; then
           tz1=$( date --date="$b1" +%s 2>/dev/null )
           tz2=$( date --date="$b2" +%s 2>/dev/null )

           if [ -n "$tz1" -a -n "$tz2" ] ; then
              startt=$(date +%H:%M -d "$b1" )
              finisht=$(date +%H:%M -d "$b2" )
              tzdiff=$(( tz2 - tz1 ))
           fi
       fi
    fi
done

var2="$startt,$finisht"

input="$( echo "$input" | awk -v vard="$dlink" -v vart="$var2" 'BEGIN {  FS="," } { print $1"xxx1" "," vard"ddd" "," vart "," $4"xxx2" "," $5"xxx3" "," $6"xxx4" "," $7"xxx5" "," $8"xxx6" "," $9"www1" "," $10"www2" "," $11"xxx7" ; }' )"

IFS=, read -ra array1 <<<"$input"
out=""

for i in "${array1[@]}"; do

        case "$i" in
        *ddd) out="$out,${i/%ddd/}";;
            
        *xxx1)  if [[ "${i/%xxx1/}" =~ ^[0-9]+$ ]]; then
                
                out="$out,${i/%xxx1/}"

                elif [[ "${i/%xxx1/}" = NULL ]]; then

                    out="$out,${i/%xxx1/}"

                else    until [[ ${var2} =~ ^[0-9]+$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="clientid field in table work" --text "Add a clientid"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter a clientid or didn't enter a number. Please enter a valid clientid: ")"

                                    done

                                    out="$out,${var2}"

                fi  
            
                ;;

        *xxx2) if [[ "${i/%xxx2/}" =~ ^[0-9]+([.][0-9]+)?$ ]]; then

                                out="$out,${i/%xxx2/}"

                                elif [[ "${i/%xxx2/}" = NULL ]]; then

                                        out="$out,${i/%xxx2/}"

                                else    until [[ ${var2} =~ ^[0-9]+([.][0-9]+)?$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="number of catchers field in table work" --text "Add number of catchers"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter number of catchers or didn't enter a number. Please enter a valid number of catchers: ")"

                                        done

                                        out="$out,${var2}"

                                fi

                                ;;

        *xxx3) if [[ "${i/%xxx3/}" =~ ^[0-9]+$ ]]; then

                                out="$out,${i/%xxx3/}"

                                elif [[ "${i/%xxx3/}" = NULL ]]; then

                                        out="$out,${i/%xxx3/}"

                                else    until [[ ${var2} =~ ^[0-9]+$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="front mower wheel hight field in table work" --text "Add front mower wheel hight"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter a front mower wheel hight or didn't enter a number. Please enter a valid front mower wheel hight: ")"

                                        done

                                        out="$out,${var2}"

                                fi

                                ;;

        *xxx4)  if [[ "${i/%xxx4/}" =~ ^[0-9]+$ ]]; then

                                out="$out,${i/%xxx4/}"

                                elif [[ "${i/%xxx4/}" = NULL ]]; then

                                        out="$out,${i/%xxx4/}"

                                else    until [[ ${var2} =~ ^[0-9]+$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="back mower wheel hight field in table work" --text "Add back mower wheel hight"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter a back mower wheel hight or didn't enter a number. Please enter a valid back mower wheel hight: ")"

                                        done

                                        out="$out,${var2}"

                                fi

                                ;;

        *xxx5)  if [[ "${i/%xxx5/}" =~ ^[0-9]+$ ]]; then

                                out="$out,${i/%xxx5/}"

                                elif [[ "${i/%xxx5/}" = NULL ]]; then

                                        out="$out,${i/%xxx5/}"

                                else    until [[ ${var2} =~ ^[0-9]+$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="categoryid field in table work" --text "Add a categoryid"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter a categoryid or didn't enter a number. Please enter a valid categoryid: ")"

                                        done

                                        out="$out,${var2}"

                                fi

                                ;;
            
        *xxx6)  if [[ "${i/%xxx6/}" =~ ^[0-9]+([.][0-9]+)?$ ]]; then

                                out="$out,${i/%xxx6/}"

                                elif [[ "${i/%xxx6/}" = NULL ]]; then

                                        out="$out,${i/%xxx6/}"

                                else    until [[ ${var2} =~ ^[0-9]+([.][0-9]+)?$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="price field in table work" --text "Add price"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter price or didn't enter a number. Please enter a valid price: ")"

                                        done

                                        out="$out,${var2}"

                                fi

                                ;;

        *xxx7)  if [[ "${i/%xxx7/}" =~ ^[0-9]+$ ]]; then

                                out="$out,${i/%xxx7/}"

                                elif [[ "${i/%xxx7/}" = NULL ]]; then

                                        out="$out,${i/%xxx7/}"

                                else    until [[ ${var2} =~ ^[0-9]+$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="tip_runid field in table work" --text "Add a tip_runid"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter a tip_runid or didn't enter a number. Please enter a valid tip_runid: ")"

                                        done

                                        out="$out,${var2}"

                                fi

                                ;;

        *ttt) out="$out,'${i/%ttt/}:00'";;

        *www1)  if [[ "${i/%www1/}" = NULL ]]; then

                out="$out,${i/%www1/}"

                elif [[ -n "${i/%www1/}" ]]; then

                    out="$out,\$\$${i/%www1/}\$\$"

                else    until [[ -n "${var2}" ]]; do

                    var2="$(zenity --forms --title="invoice number field in table work" --text "Add a invoice number"  --separator="," \
                                    --add-entry="WARNING! You either forgot to enter a invoice number. Please enter a invoice number or NULL: ")"

                    if [[ "${var2}" = NULL ]]; then

                        out="$out,${var2}"

                    else

                        out="$out,\$\$${var2}\$\$"

                    fi

                done

                fi
                                ;;

        *www2)  if [[ "${i/%www2/}" = NULL ]]; then

                                out="$out,${i/%www2/}"

                                elif [[ -n "${i/%www2/}" ]]; then

                                        out="$out,\$\$${i/%www2/}\$\$"

                                        else 

                                until [[ -n "${var2}" ]]; do

                                var2="$(zenityi --forms --title="note field in table work" --text "Add a note"  --separator="," \
                                --add-entry="WARNING! You either forgot to enter a note. Please enter a note or NULL: ")"

                                        if [[ "${var2}" = NULL ]]; then

                                                out="$out,${var2}"

                                        else

                                                out="$out,\$\$${var2}\$\$"

                                        fi

                done
                
                fi
                                ;;

        *) out="$out,'${i}:00'";;

esac;
done

echo "${out:1}"

let a++

done

简化脚本:

#!/bin/bash

work_number="$(zenity --entry --text "ENTER number of work/job entries:" --entry-text "1")"
        a=1

until
        [[ $work_number -lt $a ]]
do

input="$(zenity --forms --title="table work" --text="Add a new job" --separator="," \
       --add-entry="ENTER a: " \
       --add-entry="ENTER invoice reference field: " \
       --add-entry="ENTER b: ")"

input="$( echo "$input" | awk 'BEGIN {  FS="," } { print $1 "," $2"www1" "," $3 ; }' )"

IFS=, read -ra myarray <<<"$input"
out=""

for i in "${myarray[@]}"; do
        case "$i" in
        

        *www1) if [[ "${i/%www1/}" = NULL ]]; then

      out="$out,${i/%www1/}"

elif [[ -n "${i/%www1/}" ]]; then

      out="$out,\$\$${i/%www1/}\$\$"

else    until [[ -n "${var2}" ]]; do

            var2="$(zenity --forms --title="invoice number field in table work" --text "Add a invoice number"  --separator="," \
            --add-entry="WARNING! You either forgot to enter a invoice number. Please enter a invoice number or NULL: ")"

                    if [[ "${var2}" = NULL ]]; then

                         out="${var2}"

                    else

                         out="\$\$${var2}\$\$"

                    fi

        done

 fi
 ;;
 esac
done

out="${out#,}"
printf 'out=%s\n' "$out"
echo "$out"

let a++

done

linux bash
  • 1 个回答
  • 276 Views
Martin Hope
Christian Hick
Asked: 2020-07-07 13:28:38 +0800 CST

用于数据库插入语句的 Bash 脚本 TUI 不起作用。设置 bash 内置错误消息

  • 6

我有以下 bash 脚本,它提供了一个 Zentiy TUI 来将数据插入数据库。

#!/bin/bash

    tip_run1="$(zenity --entry --text "ENTER number of tip runs:" --entry-text "1")"
     a=1

until
        [[ $tip_run1 -lt $a ]]
do
        input="$(zenity --forms --title="table tip_run" --text="Add a new tip run" --separator="," \
        --add-entry="ENTER start_time, e.g. 8:20: " \
        --add-entry="ENTER finish_time, e.g. 12:30: " \
        --add-entry="ENTER weight in kg, -t numeric: "\
    --add-entry="ENTER a note, -t text: ")"

psql -tA -U chh1 -d crewdb -c "SELECT SETVAL('tip_run_tip_runid_seq', (SELECT MAX(tip_runid) FROM tip_run), true);" >/dev/null 2>&1

startt="$(echo "$input" | awk -F, -v  OFS=, '{print $1}')"
finisht="$(echo "$input" | awk -F, -v  OFS=, '{print $2}')"

st="$( date --date="$startt" +%s  2>/dev/null )"
ft="$( date --date="$finisht" +%s 2>/dev/null )" 

if [ -n "$st" -a "$ft" ] ; then
    
    startt="$(date +%H:%M  -d "$startt"  )"
    finisht="$(date +%H:%M -d "$finisht" )"
    tzdiff="$(( ft - st ))"
else
    tzdiff=0
fi    

while [[  ( ( ! "$startt"   =~ ^[0-1][0-9]:[0-5][0-9]$ ) && ( ! "$startt"  =~ ^[0-2][0-3]:[0-5][0-9]$ ) ) || 
          ( ( ! "$finisht"  =~ ^[0-1][0-9]:[0-5][0-9]$ ) && ( ! "$finisht" =~ ^[0-2][0-3]:[0-5][0-9]$ ) ) || 
          ( "$tzdiff" -le 0 )  ]];
do
    var2="$(zenity --forms --title="start_time and/or finish_time are incorrect" --text "Add a start_time and a finish_time"  --separator="," \
                   --add-entry="WARNING! Something went wrong. Please enter a valid start_time, e.g. 8:20: " \
                   --add-entry="WARNING! Something went wrong. Please enter a valid finish_time, e.g. 12:30: ")"
    tzdiff=0
    
    if [ -n "$var2" ] ; then
       b1=$(echo "$var2" | cut -d, -f1 )
       b2=$(echo "$var2" | cut -d, -f2 )
       
       if [ -n "$b1" -a -n "$b2"  ] ; then
           tz1=$( date --date="$b1" +%s 2>/dev/null )
           tz2=$( date --date="$b2" +%s 2>/dev/null )
           
       if [ -n "$tz1" -a -n "$tz2" ] ; then
              startt=$(date +%H:%M -d "$b1" )
              finisht=$(date +%H:%M -d "$b2" )
              tzdiff=$(( tz2 - tz1 ))
           fi
       fi
    fi
done

var2="$startt,$finisht"

input="$( echo "$input" | awk -v vart="$var2" 'BEGIN {  FS="," } { print vart "," $3 "," $4 ; }' )"

input="$((IFS=, read -r  b c d e ; echo "${b}ttt,${c}ttt,${d}xxx,${e}www" )<<<"$input")"

IFS=,; set -f; set --$input; out=
for i in "$@"; do

        case "$i" in
                xxx) var2="$(zenity --forms --title="weight field in table tip_run" --text "Add a weight in kg"  --separator="," \
                                --add-entry="WARNING! You forgot to enter a weight. Please enter a valid weight, e.g. 12.5: ")"

                                until [[ ${var2} =~ ^[0-9]+([.][0-9]+)?$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="weight field in table tip_run" --text "Add a weight in kg"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter a weight or didn't enter a number. Please enter a valid weight, e.g. 12.5: ")"

                                done

                                out="$out,${var2}"                          
                                ;;
                
        NULLxxx) out="$out,${i/%xxx/}";;        
                *xxx) if [[ "${i/%xxx}" =~ ^[0-9]+([.][0-9]+)?$ ]]; then
            
            out="$out,${i/%xxx/}"
            
            else
                 until [[ ${var2} =~ ^[0-9]+([.][0-9]+)?$ ]] || [[ ${var2} = NULL ]]; do

                                        var2="$(zenity --forms --title="weight field in table tip_run" --text "Add a weight in kg"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter a weight or didn't enter a number. Please enter a valid weight, e.g. 12.5: ")"

                                done

                                out="$out,${var2}"
            fi
                                ;;
        *ttt) out="$out,'${i/%ttt/}:00'";;
                #TRUEbool) out="$out,${i/%bool/}";;
                #FALSEbool) out="$out,${i/%bool/}";;
                #*bool) echo "empty input not allowed"; exit 0;;
        NULLwww) out="$out,${i/%www/}";;
        www)            var2="$(zenity --forms --title="note field in table tip_run" --text "Add a note"  --separator="," \
                                --add-entry="WARNING! You either forgot to enter a note. Please enter a note or NULL: ")"

                                until [[ ! ${var2} = ""  ]]; do

                                        var2="$(zenity --forms --title="note field in table tip_run" --text "Add a note"  --separator="," \
                                        --add-entry="WARNING! You either forgot to enter a note or to enter NULL. Please enter a note or NULL: ")"

                                done
                
                if [[ ${var2} = "NULL"  ]]; then
                    out="$out,${var2}"
                else

                out="$out,\$\$${var2}\$\$"
                fi;;

        *www) out="$out,\$\$${i/%www/}\$\$";;
esac;
done

#echo "${out:1}"

echo "" >> /tmp/crew.txt
echo "" >> /tmp/crew.txt
echo "-- INSERT INTO tip_run:"  >> /tmp/crew.txt
echo "INSERT INTO tip_run (date_linkid, start_time, finish_time, weight, note) VALUES (${out:1});" >> /tmp/crew.txt

let a++

done

我知道脚本的各个组件都可以工作,但是当我运行它时,我收到以下错误消息:

./tip_run.txt: line 64: set: --: invalid option
set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]

第 64 行位于以下位置:

 62 input="$((IFS=, read -r  b c d e ; echo "${b}ttt,${c}ttt,${d}xxx,${e}www" )<    <<"$input")"
 63 
 64 IFS=,; set -f; set --$input; out=
 65 for i in "$@"; do
 66 
 67         case "$i" in

我尝试了 set 的不同选项,但似乎都没有。任何人都可以让我走上正确的轨道吗?

bash zenity
  • 2 个回答
  • 112 Views
Martin Hope
Christian Hick
Asked: 2020-07-04 17:31:05 +0800 CST

基于 n 次迭代从直到循环变量派生 n 个变量的 Bash 脚本不起作用

  • 7

我在 Bash 脚本中有以下问题:

在执行脚本时,会打开 Zenity 弹出框,询问应该出现多少日期条目。例如,如果输入 3,则会打开另外 3 个 Zenity 框(一个接一个)以要求输入日期。

由此我能够生成两个变量($tvar和$date_entry_number)。$date_entry_number捕获输入的日期数量并$tvar捕获输入的所有日期,以空格分隔。在$date_entry_number= 3 的情况下,$tvar可能是 = '2020-07-02' '2020-07-03' '2020-07-04'。

我想要做的是创建包含来自的各个日期的变量$tvar,例如可以是任何数字的$tvar1='2020-07-02' $tvar2='2020-07-03' $tvar3='2020-07-04'基础。$date_entry_number这意味着 中可能有任意数量的日期$tvar。

我的想法是我需要一个 for 循环,正如您在下面的脚本中看到的那样,但我不确定如何正确执行此操作。有人可以帮忙吗?

#!/bin/bash

date_entry_number="$(zenity --entry --text "ENTER number of date_entries:" --entry-text "1")"
        a=1 

tvar=$(until
        [[ $date_entry_number -lt $a ]]
do

date_out="$(zenity --calendar \
--title="Select a Date" \
--text="Click on a date to select that date." \
--date-format="'%G-%m-%d'")"

var="${date_out}"

echo $var

let a++

done)

echo $tvar
echo $date_entry_number

for i in {1..$date_entry_number}
do

        nvar{1..$tvar}

done

echo $nvar{1..$tvar}
bash script
  • 1 个回答
  • 75 Views
Martin Hope
Christian Hick
Asked: 2020-06-30 15:23:15 +0800 CST

附加到不同文件时,带有逗号分隔值的 Bash 脚本变量不是逗号分隔的

  • 7

我有一个验证表条目的 bash 脚本。最终输出值是 $out,它被插入到 SQL INSERT 语句中,然后附加到 /tmp/crew.txt。虽然 $out 显然是用逗号分隔的,但 /tmp/crew.txt 中生成的 INSERT 语句中的值之间没有逗号。为什么会出现这种情况以及如何解决它,以便我在 /tmp/crew.txt 中有逗号分隔值?

#!/bin/bash

out=290,'02:20:00','02:40:00',20.5,NULL

echo "${out:1}"

290,'02:20:00','02:40:00',20.5,NULL


echo "INSERT INTO tip_run (date_linkid, start_time, finish_time, weight, note) VALUES ("${out:1}");" >> /tmp/crew.txt
vi /tmp/crew.txt

INSERT INTO tip_run (date_linkid, start_time, finish_time, weight, note) VALUES ( 290 '02:20:00' '02:40:00' 20 NULL);

因此 /tmp/crew.txt 中的结果应该是:

INSERT INTO tip_run (date_linkid, start_time, finish_time, weight, note) VALUES ( 290,'02:20:00','02:40:00',20,NULL);
bash script
  • 3 个回答
  • 1603 Views
Martin Hope
Christian Hick
Asked: 2020-06-29 16:27:05 +0800 CST

通过 zenity 验证两个时间值的 Bash 脚本不起作用

  • 5

我正在尝试验证程序以 $input 的形式传递的两个时间值。一旦验证,时间值将用于 SQL 插入语句。如果值超出范围,我将无法使用 date 命令,因为我收到一条错误消息。

必须将时间值传递给数据库,例如 xx:xx,因此 08:20 不能作为 8:20 传递,并且必须在 00:00 到 23:59 的有效范围内。我拆分了 $input 并通过 awk 导出了两个时间值 $startt 和 $finisht。$finisht 必须大于 $startt。

如果不满足之前的标准,我想打开带有两个时间字段的 Zenity 输入框,直到输入正确的标准。

到目前为止,我有以下 Bash 脚本,但它不起作用。有人可以帮忙吗?

#!/bin/bash

input=30:20,12:45

startt=$(echo $input | awk -F, -v  OFS=, '{print $1}')
finisht=$(echo $input | awk -F, -v  OFS=, '{print $2}')

st=`date --date="$startt" +%s`
ft=`date --date="$finisht" +%s`

let "tDiff=$ft-$st" 

if [[ ! $startt =~ [0-1][0-9]:[0-5][0-9] ]] && [[ ! $startt =~ [0-2][0-3]:[0-5][0-9] ]] || [[ ! $finisht =~ [0-1][0-9]:[0-5][0-9] ]] && [[ ! $finisht =~ [0-2][0-3]:[0-5][0-9] ]] || [[ "$tDiff" -le 0 ]];
then
                                until [[ $b1 =~ [0-1][0-9]:[0-5][0-9] ]] || [[ ! $b1 =~ [0-2][0-3]:[0-5][0-9] ]] && [[ ! $b2 =~ [0-1][0-9]:[0-5][0-9] ]] \
                                        || [[ $b2 =~ [0-2][0-3]:[0-5][0-9] ]] && [[ "$tzDiff" -le 0 ]]; do

                                var2="$(zenity --forms --title="start_time and/or finish_time are incorrect" --text "Add a start_time and a finish_time"  --separator="," \
                                      --add-entry="WARNING! Something went wrong. Please enter a valid start_time: " \
                                      --add-entry="WARNING! Something went wrong. Please enter a valid finish_time: ")"

                                b1=$(echo $var2 | awk -F, -v  OFS=, '{print $1}')
                                b2=$(echo $var2 | awk -F, -v  OFS=, '{print $2}')

                                tz1=`date --date="$b1" +%s`
                                tz2=`date --date="$b2" +%s`
                                let "tzDiff=$tz2-$tz1"

                                done

fi

echo $var2

bash zenity
  • 1 个回答
  • 248 Views
Martin Hope
Christian Hick
Asked: 2020-06-26 13:57:12 +0800 CST

如何在 Bash 中将具有两个逗号分隔值的变量插入包含多个逗号分隔值的变量中

  • 5

我有两个变量 i 和 t。我想更改 $i,以便将第二个和第三个逗号分隔字段 (30:20,12:45) 替换为 $t 的值以创建一个新变量 $o。

i=whatever,30:20,12:45,whenever,NULL
t=12:20,12:40

所以 $o 应该变成:

echo $o

whatever,12:20,12:40,whenever,NULL

如何在 Bash 中做到最好?

bash
  • 1 个回答
  • 99 Views
Martin Hope
Christian Hick
Asked: 2020-06-24 14:36:51 +0800 CST

Bash until 循环也保持时间范围有效不起作用

  • 5

我在执行以下直到循环时遇到问题bash。只要输入的时间值超出有效范围,我就希望出现 Zenity 弹出框。弹出窗口打开得很好。但是,无论是否输入了有效数据,它都会不断弹出(我必须退出终端才能跳出循环)。

#!/bin/bash

startt=30:20
finisht=12:45

until [[ $startt =~ [0-2][0-9]:[0-5][0-9] ]] && [[ $finisht =~ [0-2][0-9]:[0-5][0-9] ]]; do
     var2="$(zenity --forms --title="start_time and/or finish_time are incorrect" --text "Add a start_time and a finish_time"  --separator="," \
           --add-entry="WARNING! Something went wrong. Please enter a valid start_time: " \
           --add-entry="WARNING! Something went wrong. Please enter a valid finish_time: ")"
done

如果有人可以帮助解决这个问题,我们将不胜感激。

bash zenity
  • 1 个回答
  • 113 Views
Martin Hope
Christian Hick
Asked: 2020-06-16 17:31:28 +0800 CST

将 TUI 输入转换为数据库输出的 Bash 脚本无法正常工作

  • 5

我有以下 Bash 脚本,它捕获要为数据库插入语句准备的 TUI 数据(zenity):

#!/bin/bash

INPUT=NULL,2,Van Tassel,NULL,5,6,,8

INPUT="$(echo $INPUT | ( IFS=, read a b c d e f g h ; echo "$a,${b}xxx,$c,$d,${e}xxx,${f}xxx,${g}}
xxx,${h}xxx" ))"

IFS=,; set -f; set -- $INPUT; out=
for i in "$@"; do
    case "$i" in
        "")    echo empty input not allowed; exit 0;;
        NULL)  out="$out,$i";;
        *xxx)  out="$out,${i/%xxx/}";;
        *)     out="$out,\$\$$i\$\$";;
    esac;
done
echo "${out:1}" 

在运行此脚本时,我收到以下错误消息:

./err.txt: line 4: Tassel,NULL,5,6,,8: command not found
empty input not allowed

这个脚本有两个问题,我不知道如何解决它们。一方面,Van Tassel 条目仅在输入为“Van Tassel”或 VanTassel 时才有效,这不是从 TUI 界面接收多个字符串的方式。

第二个问题是 case "") 不起作用。如果我再次运行相同的脚本但编写 VanTassel 而不是 Van Tassel,我会得到以下输出而不是消息“不允许空输入”。

NULL,2,$$VanTassel$$,NULL,5,6,,8

这不应该是这种情况,因为第 7 个字段是空的。

任何人都可以帮助解决这个问题?

bash script
  • 1 个回答
  • 77 Views
Martin Hope
Christian Hick
Asked: 2020-06-15 17:33:00 +0800 CST

在 for 循环中使用 awk 命令的 Bash case 语句不起作用

  • 5

我有以下 bash 脚本:

#!/bin/bash

OUTPUT=NULL,2,3,NULL,5,6,7,8

pvar1=$(echo $OUTPUT | awk -F ',' '{print $1}')
pvar2=$(echo $OUTPUT | awk -F ',' '{print $2}')
pvar3=$(echo $OUTPUT | awk -F ',' '{print $3}')
pvar4=$(echo $OUTPUT | awk -F ',' '{print $4}')
pvar5=$(echo $OUTPUT | awk -F ',' '{print $5}')
pvar6=$(echo $OUTPUT | awk -F ',' '{print $6}')
pvar7=$(echo $OUTPUT | awk -F ',' '{print $7}')
pvar8=$(echo $OUTPUT | awk -F ',' '{print $8}')

for i in {$pvar1..$pvar8}
do

case "$i" in

        "NULL")
                pOUT="$(awk '{ $* = $* }1' FS=, OFS=, <<<"$OUTPUT")"
                ;;
        "")
                echo "particulars field is not allowed to be empty. Run the program again and enter NULL or choose a value!" && exit 0
                ;;
        *)
                pOUT="$(awk '{ $* = q $* q }1' FS=, OFS=, q="'"  <<<"$OUTPUT")"
                ;;

esac

done

echo "$pOUT"

输出应该是:

pOUT=NULL,'2','3',NULL,'5','6','7','8'

如果没有提供值,脚本应该退出,例如:

OUTPUT=NULL,2,3,NULL,5,6,,8

我不确定如何在 for 循环中编写 awk 命令。有人可以帮忙吗?

awk bash
  • 3 个回答
  • 546 Views
Martin Hope
Christian Hick
Asked: 2020-06-14 19:36:42 +0800 CST

如何使用 AWK 或 SED 更改变量的第三列,使其用单引号括起来

  • 5

我有一个变量 $out:

out=1,2,3,4,5

我想更改第三列,以便值得到单引号(我在这里谈论列,因为 $out 表示数据库条目的插入语句的值):

out=1,2,'3',4,5

有谁知道如何使用 awk 或 sed 来做到这一点?

linux bash
  • 2 个回答
  • 86 Views
Martin Hope
Christian Hick
Asked: 2020-06-14 18:02:06 +0800 CST

如何仅获取 PSQL 语句的变量输出

  • 6

如果有一个变量:

var=$(psql -U chh1 -d crewdb -c '\t' -c "SELECT MAX(date_linkid) + 1 FROM date_link;")

当我运行时:

echo "$var"

我得到:

Tuples only is on.
      284

我怎样才能写变量语句,所以我只能得到数字 284?

linux bash
  • 2 个回答
  • 80 Views
Martin Hope
Christian Hick
Asked: 2020-06-13 18:18:43 +0800 CST

如何使用 awk 将变量中的列值替换为变量

  • 6

我有两个变量:

var=x
out=1,2,3,4,5

我想用 $var 替换 $out 中的第三列。我可以使用以下命令将第 3 列中的 x 替换为 3(我说的是 $out 中的列,因为这些将是数据库插入语句的值):

echo $out | awk -F ',' -v new=, '{$3="x" ; print}'

那么输出是:

1 2 x 4 5

但是,使用 $var 而不是 x 与以下命令不起作用:

echo $out | awk -F ',' -v new=, '{$3=$var; print}'

那么输出是:

1 2 1,2,3,4,5 4 5

最后一个问题是输出不是逗号分隔的。所以我想要实现的是以下输出:

1,2,x,4,5

其中 x 是 $var 的当前值。有谁知道如何做到这一点。

linux bash
  • 2 个回答
  • 4925 Views
Martin Hope
Christian Hick
Asked: 2019-12-20 13:10:22 +0800 CST

fstab 配置:如何在启动时在外部硬盘驱动器上运行自动 fsck 扫描并自动备份到外部硬盘驱动器

  • 5

我有一个外部硬盘驱动器(类型 ext4),我通过 anacron 脚本每天备份我的 /home 文件夹和 postgresql 数据库。我遇到了两个问题:

1.) 当计算机(Ubuntu 18.04)启动时,我需要输入我的登录密码。然后备份命令将按预期运行。我想要的是命令在启动时自动执行,而无需在 anacron 开始执行脚本之前登录。有问题的命令是:

rsync -acu --delete --exclude-from='/home/chh1/rsync_exclude.txt' /home/ /media/chh1/f86f92f7-bcb4-4b8e-8a64-8a210606d422/home_backup/
pg_dump -h localhost -p 5432 -U postgres -d crewdb -w -C -F p -b -f /media/chh1/f86f92f7-bcb4-4b8e-8a64-8a210606d422/home_backup/chh1/Dropbox/postgres_backup/crewdb.backup.sql

请注意,作为脚本一部分的以下命令在备份到同一台计算机时无需提供登录详细信息即可执行:

pg_dump -h localhost -p 5432 -U postgres -d crewdb -w -C -F p -b -f /home/chh1/Dropbox/postgres_backup/crewdb.backup.sql

2.) 由于磁盘错误,大约 50 次成功备份后备份无法正常工作。这在 fsck 扫描后得到纠正。在我执行的每 15 次引导后自动执行 fsck 扫描

sudo tune2fs -c 15 /dev/sdb1

Kamil Maciorowski(超级用户)告诉我,如果没有相应地编辑 fstab,fsck 将不会运行。这让我想到,可能这两个问题都可以通过 fstab 条目来解决。以下是我认为可能的解决方案的示例,但只是想与知道的人仔细检查(也是第 12 行 fstab 条目的语法,可以吗?)。此外,我对任何其他可能指向正确方向的想法持开放态度:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/ubuntu--vg-root /               ext4    errors=remount-ro 0       1
# /boot/efi was on /dev/sda1 during installation
UUID=A3DA-B118  /boot/efi       vfat    umask=0077      0       1
/dev/mapper/ubuntu--vg-swap_1 none            swap    sw              0       0
/dev/sdb1       /media/chh1/f86f92f7-bcb4-4b8e-8a64-8a210606d422        ext4    rw,auto   0       2
backup cron
  • 1 个回答
  • 173 Views
Martin Hope
Christian Hick
Asked: 2019-12-19 09:43:59 +0800 CST

anacron 备份会干扰 Ubuntu 18.04 上的自动 fsck 磁盘检查吗

  • 5

我有一个普遍的问题。我每天都有一个备份计划,将我的主文件夹和 postgresql 数据库备份到外部硬盘驱动器(文件类型 ext4)。我的外置硬盘的挂载点是 /dev/sdb1。我运行以下命令来安排每 15 次启动时进行一次磁盘检查。

sudo tune2fs -c 15 /dev/sdb1

通常系统会在启动后 5 分钟左右运行备份脚本。我担心的是备份期间可能会发生磁盘检查,从而损坏外部硬盘驱动器。系统(anacron)是否考虑到这一点?如果没有,我该怎么做才能达到预期的结果?

linux ubuntu
  • 1 个回答
  • 36 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve