版权声明:所有文章都是自己编写整理,可以转载分享。--Zen in Zen https://blog.csdn.net/weixin_32393347/article/details/85650827
文章目录
bash shell
1.批量修改文件名称
#! /bin/bash
for file in ./labels/full/*.lab
do
name=${file%.lab}
new=${name}1.lab
echo $file $new
mv $file $new
echo "$file ====> $new"
done
2.wav2raw
#!/bin/bash
for wav in ./wav/*.wav
do
raw=./raw/`basename $wav .wav`.raw
echo $raw
/usr/local/bin/Wav2raw -d pathdir $wav
done
3.raw2wav
#!/bin/bash
for wav in ./wav/*.wav
do
raw=./raw/`basename $wav .wav`.raw
echo $raw
/usr/local/bin/raw2wav -d 文件夹 -s 48000 $wav
done
2018年12月13日 下午4:50
shell中的特殊变量
$0 当前脚本的文件名称
$n 传递给脚本或者函数的参数 ,n是一个数字表示第几个参数
$# 传递给函数或者脚本的参数个数
$* 传递给函数或者脚本的所有参数
$@ 传递给脚本或者参数的所有参数
$? 上个命令的退出状态,或者函数的返回值
$$ 当前shell的进程ID,对于shell脚本就是所有脚本所在的ID
基础命令
- man+命令:查阅命令的手册
- man + k +命令:查阅命令手册
- linux下的通配符:?代表一个字符;×代表0个或者多个字符;
- touch 文件名 #创建新文件
- rm -i 文件 #判断是否删除
- cat filename #文件名字
- more /etc/bash.bashrc #
- ps -ef #查看进程
- killall 进程名字
- history #查看历史命令
- print env #打印当前的环境变量
- date > test6 #重新定向输出
- mkdir -p 多级文件夹
- source filename
-
- 简单的把文件的语句依次在当前的shell执行,没有新建立子shell。那么脚本里面的所有新建或者改变的环境变量都在当前的shell里面。
-
- source filename = . filename
-
- sh filename 与./filename 有执行权限的时候是没有区别的。
sed 文本流编辑器
sed是一个“非交互式的”面向字符流的编辑器。
sed [option] 'sed command'filename
sed [option] -f 'sed script'filename
-n :只打印模式匹配的行
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-r :支持扩展表达式
-i :直接修改文件内容
sed的编辑命令(sed command):
p:打印匹配行(和-n选项一起合用)
=:显示文件行号
a\ :在定位行号后附加新文本信息
i\ :在定位行号后插入新文本信息
d :删除定位行
c\ :用新文本替换定位文本
w filename :写文本到一个文件,类似输出重定向 >
r filename :从另一个文件中读文本,类似输入重定向 <
s :使用替换模式替换相应模式
q :第一个模式匹配完成后退出或立即退出
l :显示与八进制ACSII代码等价的控制符
{} :在定位行执行的命令组,用分号隔开
n :从另一个文件中读文本下一行,并从下一条命令而不是第一条命令开始对其的处理
N :在数据流中添加下一行以创建用于处理的多行组
g :将模式2粘贴到/pattern n/
y :传送字符,替换单个字符
- sed -n “2p” filename #打印文本文件filename中的第二行并显示出来
- sed -n “/keywords/p” filename #打印filename中的含有keywords的行
- sed -n “1,3p” filename #打印filename中的第一行到第3行
- sed -n “/keyword1/,/keyword2/p” filename #打印filename中keyword1和keyword2之间的行
- sed -n “/#/!{/$/!p}” filename #打印filename中除去#开头和空格的行
- sed -e “/^#/d” -e “/^$/d” filename #删除已空格或#开头的行
- sed -i “/keyword/s/^/keywords1 /” filenaem # filename在keyword关键的行添加keyword1
- sed -e “s/keyword/keyword1 &/” filename #在filename文件的keyword前添加keyword1
- sed -e “s/keyword/& keyword1/” filename #在filename文件的keyword后添加keyword1
shell 编程
1.权限问题
在创建test1文件时, umask 的值决定了新文件的默认权限设置。由于 umask 变量在Ubuntu中被设成了 022 (参见第7章),所以系统创建的文件只有文件属主和属组才有读/写权限。
$ chmod u+x test1
#!/bin/shell
who
date
name = "yanerle"
echo "打印内容: $name"
# 两种方式将linux的输出给新的变量
# 方法一
datetime = 'date'
# 方法二
datetime = $(date)
exit
- 外部命令,有时候也被称为文件系统命令,是存在于bash shell之外的程序。它们并不是shell程序的一部分。外部命令程序通常位于/bin、/usr/bin、/sbin或/usr/sbin中
bash 循环命令
- 循环语句
# if command1 成功 才会运行command2
if command1
then command2
fi
if command1;then
command2
command3
command4
fi
- if then esle
# if 语句返回是非零的数据,则执行else语句
if [command] then
commands
else
commands
fi
if [command] then 条件句子类型
-e filename #如果文件存在,返回真
-d filename # filename 为文件夹,返回真
-f filename # filename为常规文件,返回真
-L filename #filename为符号链接,返回真
-r filename #filename可读,则为真
-w filename # filename 可写,返回真
-x filename #filename 可执行,返回真
字符串比较运算符
-z string #长度为0,返回真
-n string #长度非零,返回真
string1 = string2 #如果两个字符完全相同,则为真
string1 != string2 #两个字符串不同,则为真。
算数比较
num1 -eq num2 等于
num1 -ne num2 不等于
num1 -lt num2 小于
num1 -gt num2 大于
num1 -le num2 小于等于
num1 -ge num2 大于等于
3.if 嵌套
if command1
then
commands
elif command2
then
more commands
fi
3.test
if [ condition ] #方括号定义了测试条件。注意,第一个方括号之后和第二个方括号之前必须加上一个空格,
否则就会报错。
then
commands
fi
tips:test 判断可以是三类条件:数值比较、字符比较、文件比较
[[ $str1 = $str2 ]] #str1等于str2时返回真,str1和str2包含的文本一模一样
[[ $str1 == $str2 ]] #检查字符串是否相同的写法
[[ $str1 != $str2 ]] #如果str1和str2不同,返回真
[[ $str1 > $str2 ]]
[[ $str1 < $str2 ]]
执行脚本的命令
- bash myscript.sh
- chmod a+x sample.sh #赋予命令执行的权限
- ./myscript.sh
- #获得变量的字符串的长度 ${#var}
- $SHELL #查看当前的shell版本
判断是否是超级用户权限
#!/bin/bash
#文件名
If [ $UID -ne 0 ];then
echo "NO root,please root"
else
echo Root user
fi
使用let直接执行基本的算术运算
let a = b + c #let 可以执行基本的算术运算
或者
a = $[ b + c ]
echo "hello world">text.txt #添加
echo "hello world">> text.text #追加
shell array
array_test = (test1 test2 test3)
or
array_test[0]="test1"
array_test[1]="test2"
array_test[2]="test3"
重复执行直到成功
repeat()
{
while true
do
$@ && return
done
}
cat 命令
cat -s file #删除文件中的空格显示
find 命令
find . -print
find /home/slynux -name '*.txt' -print
文件文本的交集和差集
sort file1.txt -o file1.txt;sort file2.txt -o file2.txt
comm file1.txt file2.txt
for files in `ls`
do
echo $files
echo nan $files > stdout
done
调试
- 断点调试,gdb调试(C、C++)
- Python命令行调试(Python pdb):python3 -m pdb test.py #m=model
- pdb:l #显示当前运行到的部位
- pdb:n #接下来要执行的代码
- pdb:c # 继续执行剩下的全部
- pdb:b 行数 #设置断点
- pdb:b # 执行当前情况下的设置的断点列表
- pdb:clear 断点序号 #设置的断点序号
- pdb: p 变量数 #打印当前变量的值
- pdb:a 形参变量 #打印当前的变量
- pdb:s 进入到函数内部
- pdb:q #退出调试
- pdb:r #快速执行到函数的最后一行