一 概念
Shell是一个作为用户与Linux系统间接口的程序,允许用户向操作系统输入需要执行的命令,默认的shell是/bin/bash
二 常用功能
> 进行输出重定向,>>也可以,区别是后者是附加在文件末尾。<用来进行输入重定向
*经常用这种功能进行文件内容的输入/输出,也可以直接接字符设备,Linux把所有设备都看做文件
| 进行管道连接,即同时运行多个命令,并把左侧的输出作为右侧的输入,最右端命令默认输出至屏幕
./ 进行Shell脚本或程序可执行文件的运行
三 Shell语法
1.变量
与其他语言不一样的是,变量不需要提前声明,默认为字符串。在变量赋值的情况下使用名称,取值的情况加$,注意空字符串的情况需要用双引号
2.引号
' '单引号和" "双引号都用于直接语句输出,区别是双引号会将变量进行等值替换(如果有)
3.环境变量
$HOME $PATH $IFS分隔符 $0脚本名 $#参数个数 $$进程号 $1..$n各参数 $* $@所有参数
4.条件
test 或[] 主要比较类型:字符串(-n,!=) 算术(-eq,-gt,-le) 文件条件(-d,-e,-f,-s,-r)
if --- then --- elif --- then--- else --- fi
for .. in .. ---do --- done
while --- do --- done
case .. in .. --- ..) ...;; --- ..) ,,,;; esac
5.函数
function () {},参数使用$1...$n传递调用,使用return返回值
6.主要命令
break continue 类似C语言
: 空命令
. 在当前环境执行脚本
echo 输出带换行(-n不带)
eval 对参数求值
exec 将当前shell替换成另一程序
exit n 返回退出码
export 导出变量到子shell
expr 表达式求值,通常配合` `或$( )
printf 类似C语言
set 设置参数变量,一般取某个程序的输出
shift 把所有参数左移
trap 接受信号后采取的行动 trap 'xxx' INT
unset 删除变量或参数
find 搜索文件,用法 find [PATH] [OPTIONS] [TESTS] [ACTIONS] find . -newer myfile -type f -print
grep 通用正则表达式解析器,搜索内容 grep [OPTIONS] patten [FILES] 默认输出匹配行,常用参数-c行数 -l文件名,常用正则表达式 ^开头 $结尾 .任意字符 []指定范围 *+{n} 匹配次数(加\)
7.获得程序输出
使用$(...)取得命令程序输出结果 ;$((...))获得算术运算的值 ;${}进行参数扩展,即用值完全替换变量或进行字符串操作
8.here文档
<< 输入重定向,将需要参数在脚本中直接传递给程序
四.shell调试
-n 只检查错误 -v 执行前显示 -x 执行后显示 -u 报错未定义变量 。选项xtrace进行跟踪报告
五.图形化工具
dialog 通过参数设置,实现简单给定的图形界面显示和选择,Linux内核编译就是这样。图形化的选择输出为标准错误流,一般采用重定向到文件后读取
六.常用Vim 命令
跳转命令
gg到文件头,GG到文件尾(加上shift进行相反操作),{{ 和 }}类似,shift + h/m/l 到屏幕第一行/中间/最后一行
:set nu 显示文件行号
:n 跳转到指定行数n 非命令模式下也可以nG
0 | ^ 移动到行首 $ 移动到行尾 b 向前移动到单词首 e向后移动到单词尾 w向后移动到单词首
u撤销修改,U恢复修改
字符操作
r替换,x删除,a在下一位置插入
字符串操作
:/xxx 查找字符串,n向下查找 N向上查找
:m,ns/old/new/g 在m和n 行之间将old替换为new
*多行注释: 起始行,终止行s/要替换的字符/新字符/g eg: :20,32s/^/#/g ^表示在行首插入,#为要插入的字符,g表示替换时不确认,若要确认修改可将g改为c,这条命令在编程中能起到注释的作用,在shell中用#,C/c++中用//
*列替换: 文本中第1列至30列替换成“foo” :%s/^.\{30\}/foo/g 其中\{n\}表示.重复n次 将第12列至30列替换成“foo” :%s/\(^.\{11\}\).\{19\}/\1foo/g 其中\(...\)是pattern的用法,后面的\1就是引用了这个pattern
单词操作
yw复制当前单词,cw替换当前单词(光标位置开始往后)
行操作
对于光标所在行,使用yy复制当前行(nyy复制当前n行),p粘贴,dd删除当前行(ndd删除当前n行)
调用外部shell命令
:模式下加!和shell命令可以暂时中断vim去执行,之后返回
K可以查看单词的man手册(在Linux C库函数中)
插入内容
:r 文件名 可以将文件内容复制粘贴到当前位置,也可以配合调用命令,将命令输出结果插入到当前位置