如何避免shell脚本中的单个 * 被随机替换成目录下的一个文件名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何避免shell脚本中的单个 * 被随机替换成目录下的一个文件名相关的知识,希望对你有一定的参考价值。
问题是这样的,我的脚本中有个检查目录下某种文件个数的函数
CHECK_NUM()
path=$1
flag=$2
echo `find $path -maxdepth 1 -type f -name '$flag'|wc -l`
由于有些目录下的文件没有什么特殊标志,所以在配置文件中中是以 “*”来做标志的
现在执行脚本的时候有时候会,读取“*”后,就被随机替换成了脚本目录下的一个文件的名字
导致这个函数的返回值为0
怎样避免这种情况呢?
fileflag=`cat cfg|grep flag |cut -d "=" -f 2`
没看到你读取配置文件的脚本代码。追问
关键不在于读取配置文件,而是读取后,变量flag 的值 * ,被替换了,我测试的时候打印了它的值,居然是 ‘t_bcmcm.log’,这是我脚本目录下的一个日志文件的名字,问过许多人,都说也碰到过这种情况,但不知怎么解决
追答我想知道你在调用这个函数时是如何传参的,不仅要看到函数代码还要看到函数调用的代码。
传参的时候是否加了双引号,是否使用了转义符,等等。
是在传参的时候已经变化了,还是传进来后才变化的(传参前echo看下,函数内也echo看下)。
flag=¥2 应该是 flag=$2 吧?
SQLSTR="
select File_Head||'|aaaa' from b_load_file b where Proc_Name='$LOAD_FLAG'
"
FILE_FLAG=`EXE_SQL | grep aaa |awk -F "|" 'print $1'`
echo "$FILE_FLAG"
verr_count=`CHECK_NUM $ERR_PATH $FILE_FLAG`
代码太长粘不上来,今天修改成了读数据库,还是不行,这是获取标识符的代码
函数调用的时候参数都加上双引号:
verr_count=`CHECK_NUM “$ERR_PATH” “$FILE_FLAG”`
试试吧。
shell脚本中的数组排序
shell脚本中的数组排序
一、数组
把数字或者字符串有序或者无序的放在一个集合中的叫数组
1.数组的定义方法:
方法一:
数组名=(value0 value1 value2 ...)
方法二:
数组名=([0]=value [1]=value [2]=value [3]=value ...)
方法三`
列表名="value0 value1value2 ...."
数组名=($列表名)
方法四:
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
echo $数组名[*] #用来查看数组
2.数组包括的数据类型
数值类型 和 字符串类型
字符串类型需使用" "或者’ '定义
3.获取数组长度
*和@的方法
a=("hello" "你好" "啊啊" "啊啊啊啊啊")
a_1=$#a[*]
echo "$a_1"
4.读取某具体下标赋值
arr_index2=$arr_number[2]
echo $arr_index2
5.数组遍历
#!/bin/bash
#数组的遍历
arr=(1 2 1 4 5)
echo "原先的数组为:$arr[@]"
for i in $arr[@]
do
echo $i
done
6.数组切片
截取数组中部分数据
arry=(10 20 30 40 50 )
echo $arry[*]
echo $arry[@] #输出整个数组,此处*与@相同
echo $arry[@]:1:3 #获取 $数组名[@或*]:起始位置:长度 的值
echo $arry[@]:3:1
echo $arry[@]:3:5
7.数组替换与删除
(1)单独替换:
1.通过数组的索引号,来替换数组中相对应具体的某一个
arry=(10 20 30 40 50)
echo $arry[@]
arry[0]=7777
echo $arry[@]
(2)数组中所有对应的条件进行替换
echo $arry[*]/77/88 #临时替换
echo $arry[*] #此时数组原来的值不变
若想永久发生变化,则需要重新对arry 进行赋值,才行
(3) 删除数组
unset arry #删除arry数组
这里已经永久替换数组内容了
(4) 删除数组中具体索引对应的值
arr=(1 2 3 4 5 )
echo $arr[*]
unset arr[0] #删除数组中选择索引对应的元素
echo $arr[*]
echo $arr[0]
8.数组追加元素
(1)方法一:单个添加
arr=(10 20 30 40 50 60 )
echo $arr[5]
arr[6]=77
arr[7]=88
echo $arr[*]
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210311230135875.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aH
单个添加
(2)方法二:在不进行任何删减时,索引最大值,就是元素长度减一
因为数组是有0索引开始的,所以数组的长度比最大索引大1,因此我们可以在数组最后面进行添加。
(3) 方法三:直接获取源数组的全部元素再加上新要添加的元素,一并重新赋予该数组,重新刷新定义索引
即重新排列数组,并且重新赋值
(4)方法四:待添加元素必须用“()”包围起来,并且多个元素用空格分隔
arr+=(10 11 12 ...) #直接在arr 原有数组的情况下 增加数值。
9.向函数中传数组参数
执行得错误结果如下。
因此需要
#!/bin/bash
#数组函数传参
test ()
echo "传入得数组为:$@"
newarr=`echo $@`
echo "新得为:$newarr[@] "
arr=(1 2 21 3 4)
echo "原有$arr[@] "
test $arr[@]
可见下图,数组传入函数成功。
以上是关于如何避免shell脚本中的单个 * 被随机替换成目录下的一个文件名的主要内容,如果未能解决你的问题,请参考以下文章