下载macvim ,并设置程序依赖
brew install macVim
alias mvim=’/Applications/MacVim.app/Contents/MacOS/Vim -g’
vim配置文件设置:
vim 本地配置文件:提取码->d3uk
需要启用头文件默认插入,需要首先启用文件后缀识别
"Enable filetype plugin
filetype plugin indent on
将配置文件放置在~/下 ,
mvim testFile.sh
![]()
启用文件后缀识别之后
![]()
由于使用了youcompleteme插件, 需要进行编译,才能正常使用。进入~/.vim/bundle/youCompleteMe ,执行./install.py(实际没有使用,自动补全使用的其他方法)
使用的基本语法
使用 #!/bin/sh来确定执行该文件的程序。
变量定义不需要声明, 直接进行定义, 并且变量定义过程中不加空格。否则不能识别、
执行简单脚本,不能使用./shScript来执行。而使用. shScript来执行。
shell脚本中使用的三类命令:
Unix命令:
常用语法 :
1. echo "someText" :打印文字到控制台。
2. ls 文件列表。
3. wc -l : 计算文件中的行数 || filewc -w:计算文件中的单词数 ||filewc -c 计算文件中的字符数
4. cp sourcefile destfile : 文件拷贝
5. mv oldname newname : 重命名文件或移动文件
6. rm file : 文件
7. grep 'pattern' file :在文件内搜索字符串 ,如 : grep 'searchString' file.txt
8. cut -b colnum file :指定欲显示的文件内容范围,并将他们输出到标准输出设备,比如:输出每行第5个到第9个字符 cut -b5-9 file.txt不能与cat命令混淆。
9. cat file.txt : 输出文件内容到标准输出设备上。
10. file somefile:得到文件类型
11. read var :提示用户输入 ,并将输入赋值给变量。
12. sort file.txt: 对file.txt文件中的行进行排序
13. uniq:删除文本文件中出现的行列 ,如:sort file.txt | uniq
14. expr :进行数学运算:2+3 =>expr 2 "+" 3
15. find 搜索文件 ,比如:根据文件名搜索find . -name filename -print
16. tee : 将数据输出到标准输出设备和文件 ,比如:somecommand | tee outfile
17. basename file: 返回不包含路径的文件名,比如 :basename /bin/tux将返回tux
18. head -3 file : 打印文本文件开头3行。
19. tail -3 file :打印文本文件末尾3行。
20. sed 一个进本的查找替换程序。可以从标准输入(如命令管道)读入文本, 并将结果输出到标准输出(屏幕)。命令采用正则表达式进行搜索,不能和shell中的通配符混淆 ,比如 :将linuxfocus替换为LinuxFocus=>cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file
21. awk :awk用来从文本文件中提取字段。缺省的字符分隔符是空格,可以使用-F指定其他分割符,cat file.txt | awk -F, '{print $1 "," $3}'
概念: 管道,重定向 ,backtick
管道 (|)讲一个命令的输出作为另一个命令的输入。
重定向 :将命令的结果输出到文件而不是标准输出(屏幕)
一般情况下,每个命令都会打开3个文件:
* 标准输入文件
* 标准输出文件
* 标准错误文件
">"写入文件,并覆盖旧文件
">>"加入文件的尾部 ,并覆盖旧文件。
反短斜杠:"`"将一个命令的输错作为另一个命令的命令行参数。tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
tar命令将find命令的结果作为了打包对象,
| 参数 | 说明 |
|---|---|
| cmd > file | 输出重定向到文件 |
| cmd < file | 输入输入重定向到文件 |
| cmd >> file | 将输出以追加的方式重定向到file |
| n > file | 将文件描述符为n的文件输出到file |
| n >> file | 将文件描述符为n的文件追加到file |
| n >& m | 将输出文件m和n合并 |
| n <& m | 将输入文件合并 |
| << tag | 将开始标记tag和结束标记tag之间的内容作为输入 |
需要注意的是文件描述符0通常是标准输入,1是标准输出 ,2是标准错误输出。
如 cmd 2 > file 将标准错误输出到file文件
cmd > file 2>&1
流程控制
- if语句
if ....; then
....
elif ....; then
....
else
....
fi
流程控制中的一些条件:
1. 通常使用[ ]来表示测试条件, 需要确保方括号的空格
2. [-f "somefile"]:判断是否是一个文件
3. [-x "/bin/ls"]:判断/bin/ls是否存在并有可执行权限。
4. [-n "$var"]判断$var变量是否有值
5. ["$a" = "$b"]:判断$a与$b是否相等
注意 : 条件判断[]中间的条件开头和结束需要空格断开。如if [ ”$testStr“ ];
条件判断句中等号两端也需要使用空格断开。。if [ "$testStr" = "" ];
条件判断句中使用变量时候需要使用""进行包裹。
快捷运算符 : && ,如:[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors" 如果左边的表达式威震则执行右边的语句。
- case 语句
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) error "File $1 can not be uncompressed with smartzip";;
esac
取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;
case使用esac(翻转case)作为case语句的结束。
- select
其他一些小内容
- 将命令结果作为下一个命令的参数传入。
命令结果作为下一个命令或表达式的参数
1. 使用``反引号=>fileBasename=`basename $fileDir`
2. $() =>效果等同于``
- 有些情况下行首不能添加空格。
- cat命令使用
cat <<EndFlag
blablabla
EndFlag
=>将多行文本在shell脚本中输出到指定的文件或标准输出》,用于在脚本中提供帮助文件。
- 命令行参数
在实际参数输入之前添加 可选参数,使用”-“进行区分 - 变量执行运算
变量执行运算=》
1. 使用expr 如i=$(expr $i "+" 1)
2. 使用let命令 如:let i++
3. 使用 $[a+b]来进行运算
- 输入等待
read命令,等待用户执行输入,进行下一步操作。 - 传递参数
- *
| 参数处理 | 说明 |
|---|---|
| $# | 传递到脚本的参数个数 |
| $* | 以一个单字符串显示所有向脚本传递的参数。 |
| $$ | 脚本运行的当前进程ID号 |
| $! | 后台运行的最后一个进程的ID号 |
| $@ | 与$相同但输入输出增加了引号 |
| $- | 显示shell使用的当前选项 |
| $? | 显示最后命令退出状态。0表示无错误,其他有错误 |
输出
- echo :控制台输出
- printf:作用等同于echo ,于c中的printf方法用法相似。
test 命令(格式 : test 参数 操作符 参数 或 使用[ ] 来进行test)
用于条件语句的参数
数值测试:
| 参数 | 说明 |
|---|---|
| -eq | 等于则为真 |
| -ne | 不等于则为真 |
| -gt | 大于则为真 |
| -ge | 大于等于则为真 |
| -lt | 小于则为真 |
| le | 小于等于则为真 |
如:
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
字符串测试:
| 参数 | 说明 |
|---|---|
| = | 等于则为真 |
| != | 不相等则为真 |
| -z 字符串 | 字符串长度为零则为真 |
| -n 字符串 | 字符串的长度不为零则为真 |
num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
文件测试
(文件类型:1. 设备文件 2.目录文件 3. 普通文件)
| 参数 | 说明 |
|---|---|
| -e 文件 | 文件存在则为真 |
| -f 文件 | 文件存在且可读则为真 |
| -w 文件 | 文件存在且可写则为真 |
| -x 文件 | 文件存在且可执行则为真 |
| -s 文件 | 文件存在且至少一个字符则为真 |
| -d 文件 | 文件存在且为目录则为真 |
| -f 文件 | 文件存在且为普通文件则为真 |
| -c 文件 | 文件存在且为字符型特殊文件则为真 |
| -b 文件 | 文件存在且为块特殊文件则为真 |
- 运算符
- 算数运算符 同C基本运算
- 关系运算符 同test数值测试
- 布尔运算符 如下:
- 逻辑运算符 (oc 中&& ||)
- 字符串运算符 ,如下:
- 文件运算符 同test文件测试
布尔运算符
| 参数 | 说明 |
|---|---|
| ! | 非运算 |
| -o | 或运算 |
| -a | 与运算 |
字符串运算符
| 参数 | 说明 |
|---|---|
| = | 检测两个字符串是否相等 |
| != | 检测两个字符串是否相等,不等则返回true |
| -z | 检测字符长度是否为0, 为0返回true |
| -n | 检测字符长度是否为0 ,不为0返回true |
| str | 检测字符串是否为空,不为空返回true |
本文介绍了如何下载并配置MacVim作为shell脚本编辑器,包括安装、设置本地配置文件,启用文件后缀识别。此外,还讨论了shell脚本的基本语法,如Unix命令、管道、重定向、变量定义、执行方式、流程控制结构,以及常用命令如cat、echo、printf和test的使用。
1326

被折叠的 条评论
为什么被折叠?



