在 shell 脚本中增加输入变量号

Increment input Variable Number in shell Script

我有很多脚本在读取输入参数。我需要将所有输入参数增加 1。因此,如果它是 1,则它需要是 2 & 2 需要是 3 等等。是否有任何 unix 命令可以一次性替换所有脚本而不是转到每个脚本并手动进行。我是 Unix 的新手,不确定是否有任何方法可以做到。下面是例子。感谢对此的任何帮助。

更改前

#!/bin/ksh
hv_bus_date="CAST('' AS DATE FORMAT 'YYYYMMDD')"
hv_octs_sys_wid=
hv_act_id=

修改后

#!/bin/ksh
hv_bus_date="CAST('' AS DATE FORMAT 'YYYYMMDD')"
hv_octs_sys_wid=
hv_act_id=

编辑: 要在没有 GNU awk 的情况下将输出保存到 Input_file(s) 本身,请尝试以下操作(但请确保您 运行 我的第一个解决方案,以查看输出是否正确)。

假设我们有需要更改其值的脚本。

-rw-rw-r-- 1 ubuntu ubuntu  83 Dec  8 14:34 file2.ksh
-rw-rw-r-- 1 ubuntu ubuntu  83 Dec  8 14:34 file1.ksh

我们的 awk 脚本的名称是 script.ksh 以确保此脚本不会受到其自己的关注:)

cat script.ksh
awk '
FNR==1{
  close(out)
  out="out"++count
  rename=(rename?rename ORS:"") "mv " out OFS FILENAME
}
match([=11=],/$[0-9]+/){
  before=substr([=11=],1,RSTART)
  value=substr([=11=],RSTART+1,RLENGTH)
  rest=substr([=11=],RSTART+RLENGTH)
  if(value<9){
    value++
  }
  print before value rest > (out)
}
END{
  if(rename){
    system(rename)
  }
}
' file*sh

现在当我们 运行 通过执行 ./script.ksh 上面的脚本时,我们可以看到其中一个名为 file1.ksh 的文件的内容已经更改如下。

之前:

cat file1.ksh
hv_bus_date="CAST('' AS DATE FORMAT 'YYYYMMDD')"
hv_octs_sys_wid=
hv_act_id=

之后:

cat file1.ksh
hv_bus_date="CAST('' AS DATE FORMAT 'YYYYMMDD')"
hv_octs_sys_wid=
hv_act_id=


第一个解决方案: 考虑到您的脚本名称以 .sh 扩展名结尾,并且这个不会将输出保存到 Input_file(s),它会在终端上打印输出,仅供您检查输出是否正常。

awk '
match([=14=],/$[0-9]+/){
  before=substr([=14=],1,RSTART)
  value=substr([=14=],RSTART+1,RLENGTH)
  rest=substr([=14=],RSTART+RLENGTH)
  if(value<9){
    value++
  }
  print before value rest
}
' *sh


第二个解决方案(仅使用较新版本的 GNU awk): 一旦您对上述命令的结果感到满意并且您有gawk 命令然后尝试执行以下操作,这应该将输出保存到 Input_file(s) 本身。恕我直言,这需要 gawk 4.1.0 + 版本。

awk -i inplace -v INPLACE_SUFFIX=.bak '
match([=15=],/$[0-9]+/){
  before=substr([=15=],1,RSTART)
  value=substr([=15=],RSTART+1,RLENGTH)
  rest=substr([=15=],RSTART+RLENGTH)
  if(value<9){
    value++
  }
  print before value rest
}
' *sh