Linux命令行和Shell脚本编程(一)

 一、Linux命令行

1.1 常用命令

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

1.2 快捷键 

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:在光标位置粘贴

1.3 零碎知识

1.3.1 Linux中单引号和双引号的区别

单引号用于保留字符的字面含义,各种特殊字符在单引号里面,都会变为普通字符

双引号比单引号宽松,可以保留大部分特殊字符的本来含义,但是三个字符除外:美元符号($)、反引号(`)和反斜杠(\)

1.3.2 重定向输入输出

command > demoFile:替换

command >> demoFile:追加

command < demoFile:输入重定向

command << EOF:内联输入重定向,EOF表示结束符

二、Shell脚本编程

2.1 基本脚本示例

#!/bin/bash

echo $HOME
var1=1
var2=$(echo 3)
echo $var1,$var2

环境变量:env或printenv命令显示当前所有的环境变量,export命令用于设置/更改环境变量

用户变量:由字母、数字、下划线组成的字符串,区分大小写,等号两边不能出现空格

命令替换:将命令的输出赋给变量,两种形式,一种是反引号`command`,一种是$(command)

注意:命令替换会创建子shell来执行command,所以command中是无法使用脚本中所创建的变量的

数学运算:形式:$[ operation ]

注意:只支持整数运算,如$[4/3]会得到1

bc:使用命令替换和管道实现浮点运算,scale是计算结果保留的小数位数,默认是0,所以计算之前要先进行赋值

var1=$(echo “scale=4; 3.44 / 5” | bc)

如果有大量计算可以使用内联输入重定向

var=$(bc << EOF
scale=4
a = ($var1 * $var2)
b = ($var3 * $var4)
a + b
EOF
)

运行脚本:

Linux命令行和Shell脚本编程(一)_第1张图片

chmod u+x newfile #u代表用户,g代表组,o代表其他,a代表所有以上
chmod 755 newfile
./newfile

退出脚本:

$?:上个执行命令的退出状态码

退出状态码是一个0~255的整数值,执行成功返回0,执行错误则返回正数值

使用exit命令允许你在脚本结束时指定一个退出状态码

shell脚本默认会以脚本中最后一个命令的退出状态码退出

2.1 条件语句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命令行和Shell脚本编程(一)_第2张图片

Linux命令行和Shell脚本编程(一)_第3张图片

Linux命令行和Shell脚本编程(一)_第4张图片

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

Linux命令行和Shell脚本编程(一)_第5张图片

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

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

if-then 的高级特性:
用于数学表达式的双括号 (( expression ))

用于高级字符串处理功能的双方括号 [[ expression ]] ,提供正则判断功能

Linux命令行和Shell脚本编程(一)_第6张图片

2.2 case语句

case variable in  
pattern1 | pattern2) commands1;;  
pattern3) commands2;;  
*) default commands;;  
esac 

case命令会将变量variable与不同模式进行比较。如果变量和模式是匹配的,那么shell会执行该模式指定的命令。

可以通过竖线操作符在一行中分隔出多个模式模式。

星号会捕获所有与已知模式不匹配的值。

三、高级Shell脚本编程

Linux命令行和Shell脚本编程(二)

你可能感兴趣的:(工具)