考完激动地发下笔记(*^▽^*)
首先庆祝一下自己期中暴肝一周被捞进北航机器人队!~~~~~~~~
然后是正文
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常用命令
参考链接
批量创建文件
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路径,最开始的要加/,最后不用加;而且想对当前文件夹(路径)下的任何一个文件操作,一定记得加 ./
比如在测试某个巨佬的工程时自己传参忘记在 / 加 . 结果出大问题
判断是否为文件夹/是否存在
``用双反引号,来获取执行系统命令的结果
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.git3、拉取分支的内容
git push origin 分支名字 #或者 git pull origin 分支名4、报错解决
README.md: needs merge error: you need to resolve your current index first
git reset --merge再使用checkout命令