____通配符和正则表达式
此处的定义只针对linux 中的shell语言,对其它语言不适用
_正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。
_通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配
___grep 查找文件名时必要时添加 转义符以取消字符所带含义。就算不想应用正则表达式,也是不可能的,因为正则表达式就是字符存在的方式。
____取变量值 $变量 或者 ${变量}。 大括号存在的意义是确定了变量名字的界限,与后面跟随的字符区分开
____变量的叠加,要用双引号把叠加的内容写在一起,上面的大括号在这里就非常需要
____用echo 调试也挺方便,就像printf一样的功能。
____for 的格式和 c 类似, 多了一对括号
____测试中括号的内侧要有空格,比较的格式,需要时查找文档
____名称或变量中带空格得要加上双引号,这一点很容易忘记。想到超老师讲如果已经存在了双引号里面就得用单引号了
#!/bin/bash
# change all the names of the sub-folders.
for((i=1;i<=5;i=i+1))
do
cd /home/sophie/temp
aa=$(ls | grep "$i")
echo "$i"
mv "$aa" $i
done
1 #!/bin/bash
2
3 # change all the names of the sub-folders.
4 for((i=1;i<=20;i=i+1))
5 do
6 cd /home/sophie/temp/1
7 aa=$(ls | grep "${i}_")
8 echo "$i"
9 if [ -n "$aa" ]
10 then
11 mv "$aa" $i
12 fi
13 done
2
3 # change all the names of the sub-folders.
4 for((i=1;i<=20;i=i+1))
5 do
6 cd /home/sophie/temp/1
7 aa=$(ls | grep "${i}_")
8 echo "$i"
9 if [ -n "$aa" ]
10 then
11 mv "$aa" $i
12 fi
13 done
嵌套的文件夹名称修改
#!/bin/bash
# change all the names of the sub-folders.
for((i=1;i<=20;i=i+1))
do
cd /home/sophie/temp/2
aa=$(ls | grep "${i}")
if [ -n "$aa" ]
then
echo "$i"
mv "$aa" "${i}"
cd "$i"
pwd
for((j=1;j<=20;j=j+1))
do
bb=$(ls | grep ".${j}.")
echo "$j"
if [ -n "$bb" ]
then
mv "$bb" "$i.${j}.wma"
fi
done
fi
done
# change all the names of the sub-folders.
for((i=1;i<=20;i=i+1))
do
cd /home/sophie/temp/2
aa=$(ls | grep "${i}")
if [ -n "$aa" ]
then
echo "$i"
mv "$aa" "${i}"
cd "$i"
pwd
for((j=1;j<=20;j=j+1))
do
bb=$(ls | grep ".${j}.")
echo "$j"
if [ -n "$bb" ]
then
mv "$bb" "$i.${j}.wma"
fi
done
fi
done
---------
for((i=1;i<=20;i=i+1))
do
cd /home/sophie/temp/5
aa=$(ls | grep "s${i}$")
if [ -n "$aa" ]
then
echo "$i"
mv "$aa" "${i}"
cd "$i"
pwd
for((j=1;j<=20;j=j+1))
do
bb=$(ls | grep "s${j}.")
echo "$j"
if [ -n "$bb" ]
then
mv "$bb" "$i.${j}.wma"
fi
done
fi
done
do
cd /home/sophie/temp/5
aa=$(ls | grep "s${i}$")
if [ -n "$aa" ]
then
echo "$i"
mv "$aa" "${i}"
cd "$i"
pwd
for((j=1;j<=20;j=j+1))
do
bb=$(ls | grep "s${j}.")
echo "$j"
if [ -n "$bb" ]
then
mv "$bb" "$i.${j}.wma"
fi
done
fi
done