在他们的网站上,您被要求通过脚本安装他们的程序,而不是像大多数常规应用程序那样通过软件包存储库下载。
LV_BRANCH='release-1.4/neovim-0.9' bash <(curl -s https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.4/neovim-0.9/utils/installer/install.sh)
安装过程,但我想创建一个脚本来回答这些问题。如何编写一个命令来自动处理这些问题?
在他们的网站上,您被要求通过脚本安装他们的程序,而不是像大多数常规应用程序那样通过软件包存储库下载。
LV_BRANCH='release-1.4/neovim-0.9' bash <(curl -s https://raw.githubusercontent.com/LunarVim/LunarVim/release-1.4/neovim-0.9/utils/installer/install.sh)
安装过程,但我想创建一个脚本来回答这些问题。如何编写一个命令来自动处理这些问题?
该脚本 bash 将数据提取到 Oracle DB(另一台服务器),对其进行处理并插入到 MariaDB(我的服务器)中,但插入时数据未对齐,导致某些列为空白。
这是代码:
#!/bin/bash
ORACLE_USER="user"
ORACLE_PASSWORD="password"
ORACLE_DB="IP/SID"
MYSQL_USER="user"
MYSQL_PASSWORD="password"
MYSQL_DB="DB"
echo "Fetching data from Oracle..."
ORACLE_DATA=$(sqlplus -s "$ORACLE_USER/$ORACLE_PASSWORD@$ORACLE_DB" <<EOF
SET PAGESIZE 50000
SET COLSEP '|'
SET LINESIZE 1000
SET HEADING OFF
SET FEEDBACK OFF
SET TERMOUT OFF
select TRIM(REGION), TRIM(CENTRAL), TRIM(NOMBRE_BANCO), TRIM(MODELO), TRIM(BATERIA), TRIM(TECNOLOGIA_ID), TRIM(AMPERAJE_CA), TO_CHAR(MEDIDO, 'YYYY-MM-DD') AS MEDIDO, TRIM(PORCENTAJE), TRIM(VOLTAJE), TRIM(VOLTAJE_AC), TO_CHAR(CREADO, 'YYYY-MM-DD') AS CREADO
from SIMBA_BD.VIEW_CENTRAL_MEDICIONES_PLOMO where rownum<=10;
EXIT;
EOF
)
echo "Data fetched from Oracle:"
echo "$ORACLE_DATA"
echo "Truncating the MariaDB table..."
mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DB" <<EOF
TRUNCATE TABLE SIMBA;
EOF
echo "Inserting data into MariaDB..."
while IFS='|' read -r REGION CENTRAL NOMBRE_BANCO MODELO BATERIA TECNOLOGIA_ID AMPERAJE_CA MEDIDO PORCENTAJE VOLTAJE VOLTAJE_AC CREADO; do
REGION=$(echo "$REGION" | tr -d '\r\n')
CENTRAL=$(echo "$CENTRAL" | tr -d '\r\n')
NOMBRE_BANCO=$(echo "$NOMBRE_BANCO" | tr -d '\r\n')
MODELO=$(echo "$MODELO" | tr -d '\r\n')
BATERIA=$(echo "$BATERIA" | tr -d '\r\n')
TECNOLOGIA_ID=$(echo "$TECNOLOGIA_ID" | tr -d '\r\n')
AMPERAJE_CA=$(echo "$AMPERAJE_CA" | tr -d '\r\n')
MEDIDO=$(echo "$MEDIDO" | tr -d '\r\n')
PORCENTAJE=$(echo "$PORCENTAJE" | tr -d '\r\n')
VOLTAJE=$(echo "$VOLTAJE" | tr -d '\r\n')
VOLTAJE_AC=$(echo "$VOLTAJE_AC" | tr -d '\r\n')
CREADO=$(echo "$CREADO" | tr -d '\r\n')
REGION=${REGION:-""}
CENTRAL=${CENTRAL:-""}
NOMBRE_BANCO=${NOMBRE_BANCO:-""}
MODELO=${MODELO:-""}
BATERIA=${BATERIA:-""}
TECNOLOGIA_ID=${TECNOLOGIA_ID:-""}
AMPERAJE_CA=${AMPERAJE_CA:-0}
MEDIDO=${MEDIDO:-"NULL"}
PORCENTAJE=${PORCENTAJE:-0}
VOLTAJE=${VOLTAJE:-0}
VOLTAJE_AC=${VOLTAJE_AC:-0}
CREADO=${CREADO:-"NULL"}
echo "Region: $REGION"
echo "Central: $CENTRAL"
echo "Nombre_Banco: $NOMBRE_BANCO"
echo "Modelo: $MODELO"
echo "Bateria: $BATERIA"
echo "Tecnologia: $TECNOLOGIA_ID"
echo "Amperaje_CA: $AMPERAJE_CA"
echo "Medido: $MEDIDO"
echo "Porcentaje: $PORCENTAJE"
echo "Voltaje: $VOLTAJE"
echo "Voltaje_AC: $VOLTAJE_AC"
echo "Creado: $CREADO"
if ! [[ "$MEDIDO" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
MEDIDO="NULL"
fi
if ! [[ "$CREADO" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
CREADO="NULL"
fi
if ! [[ "$AMPERAJE_CA" =~ ^-?[0-9]+([.][0-9]+)?$ ]]; then
AMPERAJE_CA=0
fi
if ! [[ "$PORCENTAJE" =~ ^-?[0-9]+([.][0-9]+)?$ ]]; then
PORCENTAJE=0
fi
if ! [[ "$VOLTAJE" =~ ^-?[0-9]+([.][0-9]+)?$ ]]; then
VOLTAJE=0
fi
if ! [[ "$VOLTAJE_AC" =~ ^-?[0-9]+([.][0-9]+)?$ ]]; then
VOLTAJE_AC=0
fi
mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DB" <<EOF
INSERT INTO SIMBA (Region, Central, Nombre_Banco, Modelo, Bateria, Tecnologia, Amperaje_CA, Medido, Porcentaje, Voltaje, Voltaje_AC, Creado) VALUES ('$REGION', '$CENTRAL', '$NOMBRE_BANCO', '$MODELO', '$BATERIA', '$TECNOLOGIA_ID', '$AMPERAJE_CA', IF('$MEDIDO' = 'NULL', NULL, '$MEDIDO'), '$PORCENTAJE', '$VOLTAJE', '$VOLTAJE_AC', IF('$CREADO' = 'NULL', NULL, '$CREADO'));
EOF
done <<< "$ORACLE_DATA" >> SALIDA.TXT
echo "Data insertion completed."
结果如下:
Region:
Central:
Nombre_Banco:
Modelo:
Bateria:
Tecnologia:
Amperaje_CA:
Medido:
Porcentaje:
Voltaje:
Voltaje_AC:
Creado:
Region: REGION 7
Central: LERFIC
Nombre_Banco: 7LERFICCT1B6
Modelo: BATERIA GNB ABSOLYTE, 100A-19 896AH
Bateria:
Tecnologia:
Amperaje_CA:
Medido:
Porcentaje:
Voltaje:
Voltaje_AC:
Creado:
Region: J10B
Central: TYPHOON(TY1)
Nombre_Banco: 0
Modelo: 2016-12-30
Bateria: 54.45
Tecnologia: 2.25
Amperaje_CA: 0
Medido: 2017-01-10
Porcentaje:
Voltaje:
Voltaje_AC:
Creado:
我有一个名为的 systemd 服务文件myservice.service
。该服务在启动时启动。该服务启动 shell 脚本/usr/bin/myscript.sh
,如下面的部分所示[Service]
:
...
[Service]
Type=forking
ExecStart=/usr/bin/myscript.sh
PIDFile=/dev/shm/myscript.pid
...
脚本内容如下:
#!/bin/sh
/usr/bin/script-python.py > /dev/null &
echo $! > /dev/shm/myscript.pid
shell 脚本myscript.sh
启动 Python 脚本:script-python.py
。通过重定向,> /dev/null
的标准输出script-python.py
被发送到/dev/null
,因此丢失。
在StandardOutput 的 systemd 文档中我读到了以下句子:
null将标准输出连接到 /dev/null,即写入其中的所有内容都将丢失。
因此,我考虑对我的文件执行以下更改:
myservice.service
变为(添加StandardOutput=null
):...
[Service]
Type=forking
ExecStart=/usr/bin/myscript.sh
PIDFile=/dev/shm/myscript.pid
StandardOutput=null
...
myscript.sh
变为(删除>/dev/null
):#!/bin/sh
/usr/bin/script-python.py &
echo $! > /dev/shm/myscript.pid
我的问题是:如果我进行上述修改,结果与我现在的情况完全相同:所有输出都script-python.py
丢失了?没有任何区别吗?
我在某处读到过,在 shell 脚本中,[..]
像例如这样的构造[ -e $HOME/temp ]
符合 POSIX 标准。而[[..]]
像这样的脚本构造[[ -e $HOME/temp ]]
则不符合。
这是真的吗?
除了符合 POSIX 规范之外,[..] 是否比 [[..]] 具有其他固有优势?反之亦然?
此代码在 Linux 上运行良好,但在 Mac OS 上运行不佳:
#!/usr/bin/env bash
foo=$(cat <<EOF
"\[^"\]+"
EOF
)
printf "%s" "$foo"
在 Mac 上失败
./test.sh: line 6: unexpected EOF while looking for matching `"'
./test.sh: line 7: syntax error: unexpected end of file
如果我这样做cat <<EOF
而不是foo=$(cat <<EOF
,它工作得很好。有没有一种可移植的方法可以将 heredocs (或多行字符串) 放入变量中,而无需使用文件作为中间体?
编辑:我想使用 heredoc,因为我有一个带有 和 的多行字符串"
。'
我的实际示例如下:
EXPECTED_ERROR=$(cat <<EOF
Set
: Type
File "/tmp/tmp[A-Za-z0-9_/]\+\.v", line 1\(0\|1\), characters 0-15:
Error: The command has not failed\s\?!
.\?Does this output display the correct error? \[(y)es/(n)o\]\s
I think the error is 'Error: The command has not failed\s\?!
.\?'\.
The corresponding regular expression is 'File "\[^"\]+", line (\[0-9\]+), characters \[0-9-\]+:\\\\n(Error:\\\\s+The\\\\s+command\\\\s+has\\\\s+not\\\\s+failed.*
EOF
)
我正在使用 git bash,所以我想在 Unix 论坛提问是可以的,但我不熟悉 Unix,只会使用ls
、find
和grep
,所以如果我错了,请纠正我。
我有数百个.csv
文件,每个文件可能有数百行。现在我想删除空的 csv 行-- 空的 csv 行不是指只有空格的行,而是指全是逗号 ( ,,,
) 的行。
例如,csv 文件的内容为
Header2,Header3,Header5,Header7
a,b,c,d
,,,
aa,bb,cc,dd
,,,
,,,
aaa,bbb,ccc,ddd
,,,
,,,
,,,
,文件中有数百行,我想将其更新为
Header2,Header3,Header5,Header7
a,b,c,d
aa,bb,cc,dd
aaa,bbb,ccc,ddd
并且有数百个这样的文件,请注意并非所有的 csv 文件都需要更新,目前我正在使用 vim 编辑器的vimgrep RegExPattern folders
命令,它通过正则表达式模式扫描其内容来过滤出目标 csv 文件,例如/,Header5,/
仅过滤出带有 的 csv 文件Header5
;然后我将使用cdo g/RegExPattern/d | update | edit #
可以对每个命中文件运行正则表达式替换的命令,例如在这里我使用cdo g/\v^,*$/d
仅带有逗号的行来删除行。
但是,Vim 会替换并记录每一行删除的操作,因为一个文件中可能有数百个匹配项,并且有数百个 .csv 文件,所以速度非常慢。
有没有办法在 Unix 中实现这个任务?
我可以给 GNU date 一个日期和该日期的格式字符串,并告诉它从中减去一些时间吗?似乎我可以在 1 个命令中完成 3 个中的 2 个,但不是全部
我有这个日期格式:
09/Sep/24 05:02 AM
我需要从中减去 1 天:
例如:
09/Sep/24 05:02 AM
-1 day ago
应该产生08/Sep/24 05:02 AM
我已经尝试过所以,这是计算结果:
date "+%m/%d/%y %H:%M %r" -d "1 hour ago"
并产生
09/09/24 14:52 02:52:30 PM
(很好,只是我没有告诉它生产第二个)
这根本不起作用
date "+%m/%b/%y %H:%M %r" -d "09/Sep/24 05:02 AM"
date: invalid date ‘09/Sep/24 05:02 AM’
即使这样:
date "+%m/%b/%y %H:%M %r"
09/Sep/24 15:55 03:55:49 PM
再次,包括我不想要的秒数。
根据这篇文章,以下应该有效:
date -d "09/Sep/24 05:02 AM - 2 hours" '+%m/%b/%y %H:%M %r'
date: invalid date ‘09/Sep/24 05:02 AM - 2 hours’
是否可以用一行代码用 gnu date 完成此操作?
我们有一个 ksh 脚本,它应该将输出作为月份最后一天,但是每当我们运行它时都会收到以下错误:
cut: fields are numbered from 1
Try ‘cut —help’ for more information,
我一直试图调试这个问题,但无法成功。
以下是代码:
#!/usr/bin/ksh
if (( $(#) <= 1 )) ; then print "${0##*/} <two-digit month> <four-digit year›" ; exit 101 ; fi
typeset -Z2 month=${1}
typeset -Z4 year=${2}
typeset -i whencecal=$(whence cal 2>/dev/null | wc - l)
if (( whencecal != 1 )) ; then print "FATAL: \"cal\" command not found!" ; exit 102 ; fi
typeset -i wrdcount=$(cal ${month} ${year} | sed -e "/^$/ d" | tail -1 | wc -w)
typeset -Z2 momaxdate=$(cal ${month} ${year} | sed -e “/^$/ d” -e “s/[ ][ ]*/,/g” | tail -1 | cut -d”,” -f${wrdcount})
print ${momaxdate}
如何解决此问题
我有包含如下多个功能的文件。
文件1.c:
static void function1()
{
code
}
...
static void functionX()
{
code
}
...
static void lastFunction()
{
code
}
文件2.c:
static void function1()
{
code
}
...
static void functionX()
{
code is different from file1.c
}
...
static void lastFunction()
{
code
}
在这种情况下,我想找到file1.c中的functionX()并将其替换为file2.c中的functionX(),其余函数保持原样。这些函数包含相同的名称(“functionX”),但其中的代码不同。是否有可以执行此操作的 shell 脚本命令?
我需要编写一个脚本来计算每台服务器有多少个 2 或 4 端口 HBA 卡。
我在每台服务器上运行 lspci,但是到目前为止我读过的文档都没有告诉我如何确定每张卡上的卡数和端口数。
这是我得到的一些示例输出。我删除了一些行,因此输出不那么长。
# lspci | grep -i -E "fibre | ethernet"
5e:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
5e:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
5f:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
5f:00.1 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx]
b0:00.0 Fibre Channel: Emulex Corporation LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (rev 01)
b0:00.1 Fibre Channel: Emulex Corporation LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (rev 01)
d8:00.0 Ethernet controller: QLogic Corp. FastLinQ QL41000 Series 10/25/40/50GbE Controller (rev 02)
d8:00.1 Ethernet controller: QLogic Corp. FastLinQ QL41000 Series 10/25/40/50GbE Controller (rev 02)
d8:00.2 Ethernet controller: QLogic Corp. FastLinQ QL41000 Series 10/25/40/50GbE Controller (rev 02)
d8:00.3 Ethernet controller: QLogic Corp. FastLinQ QL41000 Series 10/25/40/50GbE Controller (rev 02)
那么,看看这些输出,我可以假设每个总线号(例如 5e、5f、d8 等)都是一张单独的卡吗?我是否还可以假设每个总线:设备对的每个功能号都是该卡上的一个端口?
例如 5e:00.0、5e:00.1、5e:00.2、5e:00.3
那么 Qlogic 卡是 4 端口卡吗?
例如 5e:00.0、5e:00.1
并且有 2 张 Mellanox 卡,每张都是 2 端口卡?