这个我有个大概的思路:
比如说/tmp 目录
1 先利用cd ,ls 列出所有该目录下的所有文件(包括目录)
将名字放入一个数组内。
2 循环遍历数组
每个循环内判断该对象是文件还是目录 (file命令)
2.1 if 是目录
继续重复第一步放入一个数据内
继续处理
2.2 if是文件
找到另一个文件夹内相同的文件 比较(diff命令) 输出不同的内容
end
里面就是递归循环复杂了点,思路理清了,就比较简单了,剩下就慢慢写 一步步调试了。
⑵ Linux 下C语言编程题!
1.#include<stdio.h>
#include<string.h>
#include<malloc.h>
main()
{ char *s,*h,*t;int l;
s=(char*)malloc(20*sizeof(char));
printf("input a string:");
scanf("%s",s);
l=strlen(s);/*求字符串长度赋给l*/
h=s;t=s+l-1; /*h指针指向第一个字符,t指向最后一个*/
for(;h<t;h++,t--) /*从头尾向中比较*/
{if((*h)!=(*t)){printf("not symmetric");break;} /*发现不同的字符,显示不对称,并结束比较*/
}if(h>=t)printf("symmetric"); /*如果比较完了,则显示对称*/
getch();
}
2.#include<stdio.h>
#include<string.h>
#include<malloc.h>
main()
{ char *s,*p,*q;
s=(char*)malloc(20*sizeof(char));
printf("input string:");
scanf("%s",s);
p=s;
while(*p)
{if(*p=='a'||*p=='e'||*p=='i'||*p=='o'
||*p=='u')
{q=p;/*让q指针和q指针指向同一个字符*/
while(*q)
{*q=*(q+1);q++;} /*将当前字符后面的字符前移,相当于把p指着的当前字符删除*/
p--;}
p++;}
printf("%s",s);
getch();
}
3.#include<stdio.h>
#include<string.h>
main()
{ int a,i=0,s=0;char b[52],c[100],t;
for(t='A';t<='Z';t++)
b[i++]=t;
for(t='a';t<='z';t++)
b[i++]=t;
for(i=0;i<52;i++)
printf("%c",b[i]);/*将52个大小写字母存入数组b中*/
srand(time(NULL)); /*使每次随机产生的数不同*/
for(i=0;i<100;i++) /*循环100次,产生100个随机字母*/
{ a=rand()%51; /*每次从0到51中产生一个随机数,从而从b〔0〕到b〔51〕中选出一个字母*/
c[i]=b[a]; /*每次产生的随机字母存入数组c中*/
if(b[a]=='a'||b[a]=='e'||b[a]=='i'||
b[a]=='o'||b[a]=='u'||b[a]=='A'||
b[a]=='E'||b[a]=='I'||b[a]=='O'||b[a]
=='U')s++; /*当是元音字母时,用s来统计个数*/
}
printf("\n");
for(i=0;i<100;i++)printf("%c ",c[i]);
printf("\ns:%d",s);
getch();
}
⑶ Linux Shell 下有3个数组 A(a b c) B(1 2 3) C(x y z) 现在想打印出数组D ("A[]"_"B[]"_"C[]")
很简单啊……
#!/bin/bash
a=(a b c)
b=(1 2 3)
c=(x y z)
h=0
for ((i=0; i < 3; i++)); do
for ((j=0; j < 3; j++)); do
for ((k=0; k < 3; k++)); do
echo "d[$h] = ${a[$i]}_${b[$j]}_${c[$k]}"
let h++
done
done
done
输出结果如下:
d[0] = a_1_x
d[1] = a_1_y
d[2] = a_1_z
d[3] = a_2_x
d[4] = a_2_y
d[5] = a_2_z
d[6] = a_3_x
d[7] = a_3_y
d[8] = a_3_z
d[9] = b_1_x
d[10] = b_1_y
d[11] = b_1_z
d[12] = b_2_x
d[13] = b_2_y
d[14] = b_2_z
d[15] = b_3_x
d[16] = b_3_y
d[17] = b_3_z
d[18] = c_1_x
d[19] = c_1_y
d[20] = c_1_z
d[21] = c_2_x
d[22] = c_2_y
d[23] = c_2_z
d[24] = c_3_x
d[25] = c_3_y
d[26] = c_3_z
⑷ linux shell 脚本 求任意10个数的最大值。(使用数组)
读取10个数字存入数组中
然后使用一个变量max将它的初始值设置为数组中第一个元素的值
接着从数组中第二个元素开始遍历整个数组
如果某个元素的值大于max则将max设置为该值
如此遍历完整个数组后max中便是整个数组中最大的值
下面是一个简单的示例代码
#!/bin/bash
echo-n'输入10个数:'
read-aa
max=${a[0]};
foriin{1..9}
do
if[${a[$i]}>$max]
then
max=${a[$i]}
fi
done
echo"最大值为:$max"
exit0
⑸ linux脚本,在一个循环中赋值一个数组
数组的赋值操作有问题,改成下面这样:
for ubootfile in $uboot_list
do
FILE=`find . -name $ubootfile -print -quit`
if [ -n "$FILE" ]; then
a=(${a[@]} $FILE)
else
b=(${b[@]} $FILE)
fi
done
echo "found files:"
echo ${a[@]}
echo "missing files:"
echo ${b[@]}
下面是数组操作的讲解,请参考:
数组作为一种特殊的数据结构在任何一种编程语言中都有它的一席之地,当然bashshell也不例外。本文就shell数组来做一个小的总结。
在这里只讨论一维数组的情况,关于多维数组(事实上,你得用一维数组的方法来模拟),不涉及。这里包括数组的复制,计算,删除,替换。
数组的声明:
1)array[key]=value # array[0]=one,array[1]=two
2)declare -a array # array被当作数组名
3)array=(value1 value2 value3 ... )
4)array=([1]=one [2]=two [3]=three ... )
5)array="one two three" # echo ${array[0|@|*]},把array变量当作数组来处理,但数组元素只有字符串本身
数组的访问:
1)${array[key]} # ${array[1]}
数组的删除
1)unsetarray[1] # 删除数组中第一个元素
2)unset array # 删除整个数组
计算数组的长度:
1)${#array}
2)${#array[0]}#同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的区别
数组的提取
从尾部开始提取:
array=( [0]=one [1]=two [2]=three [3]=four )
${array[@]:1} # two three four,除掉第一个元素后所有元素,那么${array[@]:0}表示所有元素
${array[@]:0:2} # one two
${array[@]:1:2} # two three
子串删除
[root@localhostdev]# echo ${array[@]:0}
one two three four
[root@localhostdev]# echo ${array[@]#t*e} # 左边开始最短的匹配:"t*e",这将匹配到"thre"
one two e four
[root@localhostdev]# echo ${array[@]##t*e} # 左边开始最长的匹配,这将匹配到"three"
[root@localhostdev]# array=( [0]=one [1]=two [2]=three [3]=four )
[root@localhostdev]# echo ${array[@] %o} # 从字符串的结尾开始最短的匹配
one tw three four
[root@localhostdev]# echo ${array[@] %%o} # 从字符串的结尾开始最长的匹配
one tw three four
子串替换
[root@localhostdev]# array=( [0]=one [1]=two [2]=three [3]=four )
第一个匹配到的,会被删除
[root@localhostdev]# echo ${array[@] /o/m}
mne twm three fmur
所有匹配到的,都会被删除
[root@localhostdev]# echo ${array[@] //o/m}
mne twm three fmur
没有指定替换子串,则删除匹配到的子符
[root@localhostdev]# echo ${array[@] //o/}
ne tw three fur
替换字符串前端子串
[root@localhostdev]# echo ${array[@] /#o/k}
kne two three four
替换字符串后端子串
[root@localhostdev]# echo ${array[@] /%o/k}
one twk three four
⑹ linux shell中数组循环取值和赋值的问题。
[seesea@UC ~]$ cat a.txt
1
2
3
4
a
b
c
d
[seesea@UC ~]$ ar=( $(cat a.txt) )
[seesea@UC ~]$ for (( i = 0; i < ${#ar[@]}; ++i )); do echo "ar[$i] = ${ar[i]}"; done
ar[0] = 1
ar[1] = 2
ar[2] = 3
ar[3] = 4
ar[4] = a
ar[5] = b
ar[6] = c
ar[7] = d
用数组更方便吧。
⑺ Linux shell 数组array基础和$a的区别
Linux Bash中,数组变量的赋值有两种方法:
(1) name = (value1 ... valuen) // 此时下标从0开始;
(2) name[index] = value
下面以一个简单的脚本来说明,脚本内容如下:
#!/bin/bash
#定义数组
A=(a b c def)
#把数组按字符串显示输出
echo ${A[@]}
#屏幕显示:a b c def
#数组的长度表示${#A[*]}
len=${#A[*]}
echo ${#A[*]}
#屏幕显示:4
#改变数组元素的值
A[3]='vivian'
echo ${A[*]}
#屏幕显示:a b c vivian
#循环输出数组元素
i=0
while [ $i -lt $len ]
do
echo ${A[$i]}
let i++
done
#屏幕输出:
# a
# b
# c
# vivian
#循环输出数组元素的另一种写法,注意,在条件中,用#a[@]取其个数。
for ((i=0;i<${#A[@]};i=$i+1))
do
echo ${A[$i]}
done
#循环输出数组元素的另一种写法,注意,在条件中,引用变量一定要用双引号 ,否则报错。
for (( j=0; j<"$len"; j=j+1 )) //len表示数组长度值
do
echo ${A[$j]}
done
#循环输出数组元素的另一种写法,注意,${A[*]}不能写成$A ,$A默认是第一个元素。 如果A="a b c ded",就可以写$A,
for value in ${A[*]}
do
echo $value
done
ps:
若a=(1 2 3 4)表示所有元素,则其只能用${a[*]}或者${a[@]}来表示。在a=(1 2 3 4)中,$a只是表示第一个元素1。
若a="1 2 3 4"表示所有元素,则其可以用${a[*]}或者${a[@]}或者$a来表示。
假如a="1 2 3 4",则array=($a)就相当于a=(1 2 3 4),不信你可以试试echo ${array[@]}。
上面的例子还可以改写成以下内容:
for value in $A
do
echo $value
done
⑻ Linux Shell awk中怎么调用数组和for循环
echo|awk'
{
array[1]=1
array[2]=2
array[3]=3
array[4]=4
array[5]=5
for(i=1;i<=5;++i){
printarray[i]
}
}'
⑼ linux shell 我建立了一个数组 定义一个整形变量tmp在循环里面有个 tmp = a[j]运行时显示
要获得数组某个元素的数据,需要进行“解引用”操作,即:tmp = ${ a[j] }
⑽ linux脚本,在一个循环中赋值一个数组
1、if
[
-n
"$FILE"
];
then
如果$FILE非空,你赋给a[i]
2、如果$FILE为空,你给了b[i]一个空值,应该赋给$ubootfile吧
3、a[i]和b[i]的i值都没有递增,最终只能得到i默认值时的a和b吧