【linux】SHELL脚本笔记

考完激动地发下笔记(*^▽^*)

首先庆祝一下自己期中暴肝一周被捞进北航机器人队!~~~~~~~~

然后是正文

shell脚本

参考链接:

0、创建&运行

 touch manage.sh
 #接着用vim打开
 vim manage.sh
 ​
 #然后运行需要给权限或者直接调用解释器运行
 /bin/bash  ./[文件名].sh

具体chmod的用法见下面

1、基本结构

开头必备(shebang)

 #! /bin/bash
 #这一句表示用bash解释器执行
 ​
 #井号用于注释,不加shebang默认用bash执行
 ​
 #! /usr/bin/python
 #这一句表示用python解释器执行
 ​
 #! /usr/bin/env
 #这个是绝对正确的

2、逻辑语句

1、if条件语句

 if   condition
 then 
     code
 else
     code
 fi

2、for循环语句

 
for i in $()
 do
     code
 done

注释:(1)这个$()表示文件夹的名称,效果等同'文件夹名称'

(2)在in后面如果跟着的是一个字符串,那么它就直接取一次,一次性把字符串的东西全部取出

(3)关于文件路径,提一嘴:最基础的是/home/robin/(home首字母小写,并且后面紧跟当前的账号的名称

3、test语法

作用:检查一个过程的结果是真还是假

 test -参数 作用对象

注意:test为真时,返回!!!!0!!!!!!

 

3、函数&传参

参考链接

关于子串 

以及关于最后两个,替换比较实用

4、linux常用命令

参考链接

  • 批量创建文件

    http://t.csdn.cn/50tFw

    touch file{0..9}.txt 即有file0.txt,file1.txt … … file9.txt

  • 遍历文件夹的文件

     for file in '文件夹的名称'
     do
         code
     done

    比如这里编写了一个try.sh脚本

        

  • 批量修改文件夹的文件

  •  for file_name in `ls`
     do
         mv $file_name `echo ${file_name//要被替换的部分/被替换后的表达}`
     done
  • 批量列出指定名字的文件

     ls *指定内容*
     比如
     ls *abb*.txt

  • cat:查看文件内容

  • $ 意为取变量的值

  • cd .. 返回上一级目录

  • chmod 改变文件的权限

     

  • 比如前面运行一个.sh文件,就是

     chmod +x  文件名.后缀
  • locate 文件名.后缀 直接返回文件的绝对路径

  • mv 当前路径下文件的名字 移动到的目标路径 移动文件的目标路径可以写相对路径,也就是相对于当前的路径的关系,比如

 

  • 那么想要把abb.txt移动到children文件夹下面,就应该(../表示上一级目录)

    plus,这里有多个abb文件,所以可以用*来囊括全部含有abb的文件

     robin@ubuntu:~/br_projects/tes$  mv abb*.txt ../children

    效果展示

     

  • linux路径,最开始的要加/,最后不用加;而且想对当前文件夹(路径)下的任何一个文件操作,一定记得加 ./

    比如在测试某个巨佬的工程时自己传参忘记在 /. 结果出大问题

  • http://t.csdn.cn/kK5lN

    判断是否为文件夹/是否存在

     

  • ``用双反引号,来获取执行系统命令的结果

  • mkdir 文件夹名 新建文件夹(在当前的目录下

     

    补充递归创建文件夹

  • vim -c "命令" 文件名 联动vim

  • zip -r 新压缩包名.zip 原文件名 压缩文件

  • echo "字符串" 在终端输出字符串(类似于C语言的printf)

instances

1、遍历文件夹下面的文件名称

 #! /bin/bash
 ​
 function red(){
         for file in  `ls $1`
         do
                 if test -f file
                 then
                         red $file
 ​
                 else
                         echo "$file is in dic"                  
                 fi
         done
 }
 ​
 ​
 red  /home/robin/br_projects/tes    
                         

2、由grep字符串匹配的结果修改文件名称

 #! /bin/bash
 cd tes/
 for file_name in `grep -l "abb" tt*`
 do
         echo $file_name
         mv $file_name abb.txt
 done
 cd ..

 

3、北航机器人队入队考核题目:linux-ros-introdution的脚本

任务目标:在child文件夹的1000个txt文件中寻找到里面含有bad guy单词的文件,并将其移动到幼儿园文件夹,并改名

 #! /bin/bash
 ​
 cd children/
 ​
 for file in `grep -l "bad guy" child*`
 do
         echo "$file has been changed"
         mv $file `echo ${file//child/tom}`
 done
 cd ..
 ​
 mkdir kindergarten
 ​
 cd children/
 ​
 mv  tom*.txt   ../kindergarten
 echo "complete moving"
 ​
 cd ../kindergarten
 ​
 vim -c"%s/bad/good/g" tom*.txt
 ​
 echo "tom has been good"

发现一个问题,如果用mv ./children/tom*.txt /kindergarten这个表达,就会permission denied

4、附上:git相关的一些使用(待后续更新,这里的理解并不正确,但是能跑hh)

1、配置用户信息(因为可能遇到**Please make sure you have the correct access rights and the repository exists.**

 git config --global user.email “you@example.com”
 git config --global user.name “Your Name” 

2、获取仓库

 git clone https://gitee.com/buaarobot_admin/Algorithm-Group-Test-2022.git

3、拉取分支的内容

 git push origin 分支名字
 #或者
 git pull origin 分支名

4、报错解决

README.md: needs merge error: you need to resolve your current index first

 git reset --merge

再使用checkout命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

robinbird_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值