1.-------------------------------------------------
#!/bin/bash是约定俗称的,执行时要先chmod +x ./bash.sh然后在 ./bash.sh即可执行脚本
1 -- SHELL读取文件的方法
#使用read命令读取一行数据
while read myline
do
echo "LINE:"$myline
done < datafile.txt
#使用read命令读取一行数据
cat datafile.txt | while read myline
do
echo "LINE:"$myline
done
#读取一行数据
cat datafile.txt | while myline=$(line)
do
echo "LINE:"$myline
done
#读取一行数据
while myline=$(line)
do
echo "LINE:"$myline
done < datafile.txt
#使用read命令读取变量数据
cat datafile.txt | while read paraa parab parac
do
echo "PARAA:"$paraa
echo "PARAB:"$parab
echo "PARAC:"$parac
done
#使用read命令读取变量数据
while read paraa parab parac
do
echo "PARAA:"$paraa
echo "PARAB:"$parab
echo "PARAC:"$parac
done < datafile.txt
覆盖写方式(每次写之前先清空文件):
1
|
echo
"Hello World"
>logfile
|
追加写方式(每次都从文件最后开始写):
1
|
echo
"Hello World"
>>logfile
|
2. #!/bin/sh
3.
4. myPath="/var/log/httpd/"
5. myFile="/var /log/httpd/access.log"
6.
7. # 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
8. if [ ! -x "$myPath"]; then
9. mkdir "$myPath"
10. fi
11.
12. # 这里的-d 参数判断$myPath是否存在
13. if [ ! -d "$myPath"]; then
14. mkdir "$myPath"
15. fi
16.
17. # 这里的-f参数判断$myFile是否存在
18. if [ ! -f "$myFile" ]; then
19. touch "$myFile"
20. fi
21.
22. # 其他参数还有-n,-n是判断一个变量是否是否有值
23. if [ ! -n "$myVar" ]; then
24. echo "$myVar is empty"
25. exit 0
26. fi
27.
28. # 两个变量判断是否相等
29. if [ "$var1" = "$var2" ]; then
30. echo '$var1 eq $var2'
31. else
32. echo '$var1 not eq $var2'
33. fi
以下shell脚本完成将指定文件夹下所有文件中的abc都替换为def。
1
2
3
4
5
6
7
|
#!/bin/sh
folder=
/home/myFolder
#这里可以写绝对路径也可以写相对路径,但建议前者
src=
"abc"
#要替换的字符串
des=
"def"
#替换后的字符串
echo
"Replacing..."
sed
-i
"/$src/s/$src/$des/g"
$folder/*
echo
"Done!"
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
|
#!/bin/sh
folder=
/home/myFolder
#这里可以写绝对路径也可以写相对路径,但建议前者
src=
"abc"
#要替换的字符串
des=
"def"
#替换后的字符串
echo
"Replacing..."
for
ofile
in
$folder/*
do
if
[ ! -f $ofile ];
then
continue
#不是文件就立即继续下一次循环
fi
grep
"$src"
$ofile >
/dev/null
if
[ $? -
eq
0 ];
then
sed
-i
"s/$src/$des/g"
$ofile
fi
done
echo
"Done!"
|
不可避免需要用到sed
5.---文件重命名mv命令是move的缩写,可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。
1.命令格式:mv [选项] 源文件或目录 目标文件或目录
mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。
3.命令参数:
- -b :若需覆盖文件,则覆盖前先行备份。
- -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;
- -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!
- -u :若目标文件已经存在,且 source 比较新,才会更新(update)
- -t : --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。
1. 文件重命名命令: mv 旧文件名 新文件名
- #查看这个文件
- bixiaopeng@bixiaopengtekiMacBook-Pro ~$ ls -l |grep *.jpg
- -rw-r--r--@ 1 bixiaopeng staff 41287 8 13 16:42 bixiaopeng.jpg
- #改名
- bixiaopeng@bixiaopengtekiMacBook-Pro ~$ mv bixiaopeng.jpg bxp.jpg
- #再次查看
- bixiaopeng@bixiaopengtekiMacBook-Pro ~$ ls -l |grep *.jpg
- -rw-r--r--@ 1 bixiaopeng staff 41287 8 13 16:42 bxp.jpg
3. 移动多个文件: mv 文件1 文件2 文件3 目录路径
4. 将文件1改名为文件2,如果文件2已经存在,则询问是否覆盖: mv -i 文件1 文件2
5.将文件1改名为文件2,如果文件2已经存在,强制覆盖: mv -f 文件1 文件2
6. 移动目录: mv 目录1 目录2
7.移动当前文件夹下的所有文件到上一级目录: mv * ../