shell的基本使用及vi 编程

1.-------------------------------------------------

#!/bin/bash是约定俗称的,执行时要先chmod +x ./bash.sh然后在   ./bash.sh即可执行脚本

#!/bin/bash是指此脚本使用/bin/bash来解释执行。
其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。
bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,...
我们可以通过以下一个示例来进行实验,了解#!/bin/bash的使用。
1)#!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。
这里有三个脚本(脚本都要使用”chmod +x   scriptname“命令来获得可执行权限):
tbash1.sh:
#!/bin/sh
source abc
echo "hello abc"

tbash2.sh:
#!/bin/bash
source abc
echo "hello abc"

tbash3.sh:
source abc
echo "hello abc"

三个脚本执行的结果:
[nsvc@localhost other]$ ./tbash1.sh 
./tbash1.sh: line 2: abc: No such file or directory
注:当source命令执行有问题时,sh不再往下面执行。
[nsvc@localhost other]$ ./tbash2.sh 
./tbash2.sh: line 2: abc: No such file or directory
hello abc
注:当source命令执行有问题时,bash继续执行下面命令。
[nsvc@localhost other]$ ./tbash3.sh 
./tbash3.sh: line 1: abc: No such file or directory
hello abc
注:自身登录系统所在的shell是bash。所以,当source命令执行有问题时,bash继续执行下面命令。
2.++++++++++++++++++++++++
vi的一些使用a是在当前光标之前插入,i是在当前光标之后,在普通模式下dd是删除整行,D是删除到行首,xor X是删除一个字符
http://www.cnblogs.com/junw_china/articles/1708967.html

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



3.。。。文件的重定向>  和 >>

覆盖写方式(每次写之前先清空文件):

1
echo  "Hello World"  >logfile


追加写方式(每次都从文件最后开始写):

1
echo  "Hello World"  >>logfile
4.判断文件是否存在---------------
 1. shell判断文件,目录是否存在或者具有权限 
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 动作;
-i :直接修改读取的文件内容,而不是输出到终端。

#!/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 $line ${line}.${Date}.{end}     

mv命令是move的缩写,可以用来移动文件或者将文件改名,是Linux系统下常用的命令,经常用来备份文件或者目录。

1.命令格式:

mv [选项] 源文件或目录 目标文件或目录


2.命令功能:


mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。

3.命令参数:

[plain]  view plain copy
  1. -b :若需覆盖文件,则覆盖前先行备份。   
  2. -f :force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖;  
  3. -i :若目标文件 (destination) 已经存在时,就会询问是否覆盖!  
  4. -u :若目标文件已经存在,且 source 比较新,才会更新(update)  
  5.    -t  : --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目标目录,该选项适用于移动多个源文件到一个目录的情况,此时目标目录在前,源文件在后。  
4.命令实例:


1. 文件重命名命令: mv 旧文件名  新文件名

[plain]  view plain copy
  1. #查看这个文件  
  2. bixiaopeng@bixiaopengtekiMacBook-Pro ~$ ls -l |grep *.jpg  
  3. -rw-r--r--@  1 bixiaopeng  staff     41287  8 13 16:42 bixiaopeng.jpg  
  4. #改名  
  5. bixiaopeng@bixiaopengtekiMacBook-Pro ~$ mv bixiaopeng.jpg bxp.jpg  
  6. #再次查看  
  7. bixiaopeng@bixiaopengtekiMacBook-Pro ~$ ls -l |grep *.jpg  
  8. -rw-r--r--@  1 bixiaopeng  staff     41287  8 13 16:42 bxp.jpg   
2. 移动文件: mv 文件  目录路径
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 * ../

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值