shell脚本作为必须要掌握的内容,已经被扔了好久了,没去学习了
现在趁此机会,好好学习一波
同时,也改变一下,学习语言时的博客风格
捡有意义,值得进行记录得点进行记录,不然最后博客写的就像,抄书一样…
shell脚本的准备
#!/bin/bash 表示使用的解释器
是注释开始的标志,多写注释,便于程序的理解
最简单的shell脚本就是命令的罗列
脚本执行的两种方法:
-
使用 “ bash xxx.sh “ 运行脚本 ,同理,可以使用,zsh,sh,之类的解释器都可以
-
” chmod + x xxx.sh “ 加上执行的权限,然后,./xx.sh运行脚本
-
将此脚本放在任何系统path下,都有可以变成默认的系统命令,可以直接进行使用
shell脚本的排错
有以下三种方法:
-
使用echo进行排错
此方法类似于C语言中的printf排错法
-
使用 bash -x 选项
这样可以打印出每一步的结果,可以查看执行的代码,从而进行变量的排错
-
使用第三方工具,bashdb ,类似于GDB的排错程序
shell的内建命令
alias, bg, bind, break, builtin, caller, cd, command, compgen, complete, compopt, continue, declare, dirs, disown, echo, enable, eval, exec, exit,
export, false, fc, fg, getopts, hash, help, history, jobs, kill, let, local, logout,
mapfile, popd, printf, pushd, pwd, read, readonly, return, set, shift, shopt, source,
suspend, test, times, trap, true, type, typeset, ulimit, umask, unalias, unset, wait -
这些都属于内建命令,bash-built-in
凡是用which命令查不到程序文件所在位置的命令都是内建命令
内建命令没有单独的man手册,要在man手册中查看内建命令,应该man bash-builtins
内建命令虽然不创建新的进程,也会有返回值,通常用0表示成功非零表示失败,可以用特殊变量$?读出
内建命令,相当于shell的函数,并不会创建新的进程,而外建命令是新的进程
其中一些有意思的命令:
1. type: 查看命令是否是内建命令
2. .: 表示执行程序
3. alias: 命令别名
4. unalias: 取消命令别名
5. fg,bg,jobs: jobs查看当前任务,fg将后台任务调至前台运行,bg将任务调职前台
6. cd: 改变工作目录
7. declare,typeset: shell属于弱类型的语言,对于变量的类型界定不是很明确,
declare,typeset效果完全相同,可以-i声明整型,-r声明只读变量
在这里需要分想给大家的是,shellscript写起来,和使用命令是很像的
比如:
declare -F 显示脚本中的函数名
declare -f 显示脚本中的函数体
而在bash中使用,则是显示整个系统中的函数和函数体 (在shell脚本中的)
8. echo: 很常见的内建命令,类似于printf,可以进行信息的打印,缺省打印换行符,-n可以取消
9. break: 根据shell提示,只能用于,for,while,loop的循环中,用于跳出循环
10. continue: 同理的,跳出当前循环,进入其他层的循环
*break,contiune,后都可以跟上数字,表示跳出指定层数的循环
11. eval: 将其后的参数作为shell的输入,并产生新的命令
12. exec: 表示用exec后的程序进行shell的替换,在命令执行完成之后,现在的shell会被清理掉
因为他的任务只是执行这一条命令,,,
为了避免这种情况,所以一般将exec的命令放到shell脚本中,exec会替换子脚本进程,而像source
. 之类的命令,并不会替换子进程,而是将命令放在当前的shell中执行
13. exit: 退出shell
14. export: 使变量能够被shell识别,export属于变量输出,使得父shell中的变量能够被子shell识别
即使得多的不同的shell,可以相互识别变量,export,我认为比较像C中的extern*
但是,不同的是,改变shell中的变量的值,互不影响,仅为同名的局部变量,而C中,是同一变量..
15. kill: 这是一个相常用的命令,用于杀死进程,向内核传递一个进程号以及处理的序号
备注:在Linux操作系统中,一般有三种进程,交互式进程,批处理进程,系统进程(包括守护进程)
16. let: 进行整数运算的命令,同时也支持C类的运算
17. pwd: 显示当前工作目录
同时,使用 $OLDPWD, $PWD变量可以获取当前工作目录,以及之前的工作目录变量
18. local: 声明局部变量,仅能在函数内部使用,在外使用会爆炸
19. read: 从标准输入读取一行输入给变量,即为scanf
read从标准输入获取到的内容默认放在 $REPLAY中,可以使用** echo $REPLY ** 查看
20. return: 类似于其他语言,再函数中进行返回值的传递,不使用return,默认以最后一行的状态作为返回值
可以使用 **“echo $? 查看返回值” **
21. shift: 进行为位置参数的移动,类似于,argc一样,
shell中的变量,依次记作,$1,$2,$3,$4..$0是脚本本身,
其中还有几个比较有意思的变量,$@/$* 表示所有变量,$#表示变量总个数
所以,shift的作用是,进行参数的左移.
22. unlimit: 不做多余赘述
23. test: 用于测试expression的值,很方便
以上就是,进行shellscript脚本学习的Linux命令基础,暂时没有截图
后面关于正式的shellscript会有相关的截图来进行说明
December 4, 2017 11:56 PM