内核是Linux系统的心脏,从开机自检就驻留在计算机的内存中,直到计算机关闭为止;而用户的应用程序存储在计算机的硬盘上,仅当须要时才被调入内存; 而Shell独立于内核,是链接内核和应用程序的桥梁,并由输入设备读取命令,再将其转为计算机能够理解的机械码,Linux内核才能执行该命令
(能够理解为 Shell是一种应用程序,当用户登陆 Linux系统时,Shell就会被调入内存去执行;Shell提供了用户与内核进行交互操做的一种接口,接收用户输入的命令,并把它送入内核去执行)shell
Shell不但能够与用户进行逐个命令交互执行,还能够经过脚本语言进行编程;经过对Shell进行编程,可以使大量任务自动化,对系统管理、系统维护方面特别有用编程
Shell脚本的基本结构bash
Shell脚本的运行函数
使用变量:在Shell程序中全部变量保存的值都是字符串学习
变量类型 | 说明 |
---|---|
环境变量 | 与Shell的执行环境相关的一些变量,如PATH、HOME等,用户可从新定义。(1)环境变量的建立:export,export ABCD=2;(2)环境变量的查看:使用echo命令查看单个环境变量,如echo $PATH;使用printenv查看全部环境变量;使用set查看全部本地定义的环境变量 |
预约义变量 | 用户不能修改,只能引用的变量。由“$”+其余符号组成 |
位置变量 | 在执行脚本时,传入到脚本中对应脚本位置的变量 |
标准变量 | 也是环境变量,在bash环境创建时生成,可以使用printenv命令查看 |
自定义变量 | 变量名=变量值(变量名前不需加$,等号两边不能有空格) |
经常使用的预约义变量设计
预约义变量 | 说明 |
---|---|
$# | 传递到脚本或函数的参数数量 |
$* | 传递到脚本或函数的所有参数 |
$? | 前一个命令执行状况,返回0表示成功,其余值表示失败 |
$$ | 当前进程的ID(PID) |
$! | 后台运行的最后一个进程的进程ID(PID) |
$0 | 当前脚本的名称 |
输入/输出内部命令
输出命令:echo
输入命令:read调试
常见的通常错误
输入错误:如输入了错误的关键字、成对的符号漏输入一部分等
字符大小写错误:在Linux中,严格区分字符大小写。全部关键字都用小写字母表示,建议变量名使用大写字母组合来表示
循环错误:因为Shell中的循环控制语句与通常高级程序设计语言不一样,输入结构时容易出错code
调试跟踪
-n选项:不执行脚本,仅检查脚本中的语法问题
-v选项:将执行过程当中的每一个脚本命令(包括输入的内容)都原样输出到终端
-x选项:在执行过的每一个命令的行首添加“+”号显示在终端,并显示变量的值。使用该选项更方便跟踪程序的执行过程接口
#! /bin/sh groupadd wl20 for username in xlr cyx zh gjj do useradd -g wl20 $username echo "123456" | passwd --stdin $username done
#! /bin/sh #脚本名称 count.sh read -p "请输入路径(直接回车换行表示当前目录):" fpath if ["$fpath" = ""] then fpath=$(pwd) fi #定义一个函数fun_directory directory(){ echo "您输入的路径为:$fpath" let "filenum=0" let "dirnum=0" for dir in ${fpath}/* do if [ -d "$dir" ] then let "dirnum+=1" elif [ -f "$dir" ] then let "filenum+=1" fi done echo "该目录下共有子目录$dirnum个" echo "该目录下共有文件$filenum个" } #调用函数 directory
#! /bin/bash for((ROW=1;ROW<10;ROW++)) do for((COL=1;COL<=$ROW;COL++)) do echo -ne "$ROW*$COL="`expr $ROW \* $COL` " " done echo done
本套 Linux学习笔记完结,将来将在各章节中加入相关的思惟导图以便理解,欢迎关注后续 ~进程