Linux命令行
常用命令
echo -n "hello" #不换行
echo -e "hello\nworld"
head -n2 data.txt
tail -n2 data.txt
ping 127.0.0.1 > ping.log & #置于后台运行
jobs #查看后台作业
fg #移置前台运行
which command #查看可执行文件的位置
find . -name "*.c"
df -h #显示磁盘使用情况
du -sh #显示当前文件夹的大小
ln -s data.txt link
ln data.txt link
date #显示当前日期和时间
wc file #统计file的行数,单词数和字节数
wc -c file #只统计file字节数
wc -l file #只统计file行数
ps -ef #显示当前所有进程
ps -aux #显示所有包含其它使用的进程
top #显示系统正在执行进程的相关信息,包括进程ID、内存占用率、CPU占用率等
kill -9 PID #强制结束进程
killall command
free #显示系统内存使用情况
tar cvf file.tar file/
tar xvf file.tar
zip file.zip file/*
unzip file.zip
alias today='date +"%A, %B %-d, %Y"'
unalias today
快捷键
ctrl a:将光标移至行首
ctrl b:将光标向行首移动一格
ctrl e:将光标移至行尾
ctrl f:将光标向行尾移动一格
ctrl l:清屏
shift PageUp:向上翻页
shift PageDown:向下翻页
ctrl d:删除光标处字符/命令行没有字符则关闭shell会话
ctrl w:删除光标处向行首的单词
ctrl k:从光标位置剪切/删除至行尾
ctrl u:从光标位置剪切/删除至行首
ctrl y:在光标位置粘贴
零碎知识
Linux中单引号和双引号的区别
单引号用于保留字符的字面含义,各种特殊字符在单引号里面,都会变为普通字符
双引号比单引号宽松,可以保留大部分特殊字符的本来含义,但是三个字符除外:美元符号($)、反引号(`)和反斜杠(\)
重定向输入输出
command > demoFile:替换
command >> demoFile:追加
command < demoFile:输入重定向
command << EOF:内联输入重定向,EOF表示结束符
执行数学运算
a=10
b=5
sum=$(expr $a + $b)
diff=$(expr $a - $b)
prod=$(expr $a \* $b) #乘法
quotient=$(expr $a / $b) #除法
remainder=$(expr $a % $b) #取余
int_division=$(expr $a / $b) #整除
power=$(expr $a \*\* $b) #幂运算
Shell脚本编程
基本脚本示例
#!/bin/bash
echo $HOME
var1=1
var2=$(echo 3)
echo $var1,$var2
环境变量:env或printenv命令显示当前所有的环境变量,export命令用于设置/更改环境变量
用户变量:由字母、数字、下划线组成的字符串,区分大小写,等号两边不能出现空格
命令替换:将命令的输出赋给变量,两种形式,一种是反引号`command`,一种是$(command)
注意:命令替换会创建子shell来执行command,所以command中是无法使用脚本中所创建的变量的
运行脚本:
chmod u+x newfile #u代表用户,g代表组,o代表其他,a代表所有以上
chmod 755 newfile
./newfile
退出脚本:
$?:上个执行命令的退出状态码
退出状态码是一个0~255的整数值,执行成功返回0,执行错误则返回正数值
使用exit命令允许你在脚本结束时指定一个退出状态码
shell脚本默认会以脚本中最后一个命令的退出状态码退出
条件语句if
if command
then
commands
fi
if command;then
commands
fi
执行command,如果command执行成功,即退出状态码为0,则继续执行commands,否则不执行
if command
then
commands1
else
commands2
fi
if command;then
commands1
else
commands2
fi
执行command,如果command执行成功,即退出状态码为0,则执行commands1,否则执行commands2
if command1
then
commands
elif command2
then
more commands
fi
if command1;then
commands
elif command2;then
more commands
fi
执行command1,如果command执行成功,即退出状态码为0,则执行commands,否则执行command2,如果command2执行成功,则执行more commands
if [ condition ]
then
commands
fi
if [ condition ];then
commands
fi
注意:第一个方括号之后和第二个方括号之前必须都加上一个空格,[ ]支持三类条件判断,前面用!表示取非。
- 数值比较
- 字符串比较
- 文件比较
注意:字符串比较
大于号和小于号必须转义,否则shell会把它们当作重定向符号,把字符串值当作文件名
大于和小于顺序和sort命令所采用的不同。在比较测试中,大写字母被认为是小于小写字母的。但sort命令恰好相反
复合条件判断:两种布尔运算符
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
if-then 的高级特性:
用于数学表达式的双括号
用于高级字符串处理功能的双方括号
,提供正则判断功能
case语句
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
case命令会将变量variable与不同模式进行比较。如果变量和模式是匹配的,那么shell会执行该模式指定的命令。
可以通过竖线操作符在一行中分隔出多个模式模式。
星号会捕获所有与已知模式不匹配的值。
高级Shell脚本编程
Linux命令行和Shell脚本编程(二)
案例
赋值:不存在赋默认值,存在赋其值
datasets_path=${DATASETS_PATH:-'/datasets/cnn_dailymail'}#如果DATASETS_PATH存在,赋值$DATASETS_PATH,如果不存在赋值/datasets/cnn_dailymail
max_batch_size=${max_batch_size:-128}#max_batch_size存在赋值$max_batch_size,不存在赋值128