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中是无法使用脚本中所创建的变量的

运行脚本:

linux如何进入mysql_shell

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

注意:第一个方括号之后和第二个方括号之前必须都加上一个空格,[  ]支持三类条件判断,前面用!表示取非。

  • 数值比较
  • 字符串比较
  • 文件比较

linux如何进入mysql_linux如何进入mysql_02

linux如何进入mysql_shell_03

linux如何进入mysql_linux_04

注意:字符串比较
大于号和小于号必须转义,否则shell会把它们当作重定向符号,把字符串值当作文件名
大于和小于顺序和sort命令所采用的不同。在比较测试中,大写字母被认为是小于小写字母的。但sort命令恰好相反

linux如何进入mysql_shell_05

 复合条件判断:两种布尔运算符

[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]

if-then 的高级特性:

用于数学表达式的双括号 

linux如何进入mysql_shell_06

用于高级字符串处理功能的双方括号

linux如何进入mysql_linux_07

 ,提供正则判断功能

linux如何进入mysql_状态码_08

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