一、什么shell?什么是shell命令?什么是shell脚本? ?? ?1.shell ?命令行解释器 ?? ??? ?(1)sh ? :(全称 Bourne Shell)是UNIX最初使用的 shell, ?? ??? ?而且在每种 UNIX 上都可以使用。Bourne Shell 在 shell? ?? ??? ?编程方面相当优秀,但在处理与用户的交互方面做得不如 ?? ??? ?其他几种 shell。 ?? ??? ?(2)csh ?:是一种比 Bourne Shell更适合的变种 Shell, ?? ??? ??? ?它的语法与 C 语言很相似 ?? ??? ?(3)ksh ?:集合了 C Shell 和 Bourne Shell 的优点并且 ?? ??? ??? ?和 Bourne Shell 完全兼容。? ?? ??? ?(4)bash :LinuxOS 默认的,它是 Bourne Shell 的扩展。 ?? ??? ?与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基 ?? ??? ?础上增加了很多特性。可以提供命令补全,命令编辑和命 ?? ??? ?令历史等功能。它还包含了很多 C Shell 和 Korn Shell? ?? ??? ?中的优点,有灵活和强大的编辑接口, ?? ??? ?同时又很友好的用户界面 ?? ??? ? ?? ??? ?dash--bash的轻量版 ?? ??? ? ?? ??? ?echo $SHELL ?? ? ?? ? ?? ?2.shell命令 ? 就是我们平时用的命令 如ifconfig ?? ? ?? ? ?? ?3.shell脚本 ? 本身是一个以.sh结尾的文件,里面是命令的集合 ?? ??? ?能批量执行命令 ?? ??? ? ?? ??? ?是一种解释语言,不需要编译。 ?? ??? ? ?? ?4.shell脚本的执行方式 ?? ??? ?1.以 ?./xxx.sh 的方式执行 ?(chmod u+x xxx.sh ?./xxx.sh) ?? ??? ? ?? ??? ?2. bash xxx.sh ?? ??? ? ?? ??? ?3. source xxx.sh ?? ? ?? ? ?? ??? ?三种执行方式的区别 ?? ??? ??? ?1. ./ 的方式执行需要加执行权限 ? bash ?source ?不需要加执行权限 ?? ??? ??? ?2. source 的方式执行,是在当前终端执行 ?? ??? ??? ??? ?./ 和 bash 的方式是在后台新启动一个终端执行,将执行结果返回到当前终端 ?? ??? ??? ??? ?这个终端我们看不到 ??
二、shell中的变量 ?? ?1.shell中定义变量时 无需加数据类型? ?? ?2.变量的命名规则 ?? ??? ?1.变量名一般用大写 ?? ??? ?2.和C语言类似,也有命名规范 ?? ??? ??? ?数组字符下划线组成 ?? ??? ??? ?不能以数字开头 ?? ??? ??? ?不能和shell中的关键字冲突 ?? ?3.每条指令结束后不需要加 分号 ?? ?4.变量的赋值 ?? ??? ?1.shell中的变量都是字符串,没有整型 浮点型 字符型的区别 ?? ??? ?2.变量赋值时 等号 前后不要加空格 ?? ??? ?3.如果赋值的字符串中有空格 ?要用 '' ?"" ?? ??? ?4.''不能引用其他变量的值?? ? ?? ??? ?//VAR0=beijing;VAR1='hello world $VAR0' ? ---输出 hello world $VAR0 ?? ??? ? ?? ??? ?5.“”可以引用其他变量的值?? ? ?? ??? ?//VAR0=beijing;VAR2="hello world $VAR0" ? ---输出 hello world beijing ?? ??? ? ?? ??? ?6.“”双引号可以识别转义字符,''单引号不能 ?? ??? ??? ?'hello \"world\"' ?---- ?hello \"world\" ?? ??? ??? ?"hello \"world\"" ?---- ?hello "world" ?? ? ?? ?5.引用变量的值 ?? ??? ?$变量名 ?? ??? ?${变量名} ?? ??? ? ?? ??? ?注意不要写成 $() ?----命令置换符 ?? ??? ? ?? ??? ? ?? ?6.输出: ?? ??? ?echo $VAR ?---自动加换行 ?? ??? ?echo -n $VAR ---输出不加换行 ?? ??? ?echo -e $VAR ---能识别转义字符 ?\n ?输出 ?? ??? ? ?? ??? ?例如: ?? ??? ??? ?VAR1=hello ?? ??? ??? ?echo ?$VAR1 ?//hello ?? ??? ??? ?echo ?VAR1 //VAR1?? ?7.shell中的注释:
?? ? ? ? ? ? ?# 单行注释
?? ??? ??? ??? ?:<<EOF ?? ??? ??? ??? ??? ?#多行注释 ?? ??? ??? ??? ?EOF
?
8.unset 清空变量的值 ?? ??? ?格式 ?? ??? ??? ?unset 变量 ? //注意 ? 变量前不要加$ ?? ??? ?例如: ?? ??? ??? ?VAR="hello" ?? ??? ??? ?echo $VAR // 输出 hello ?? ??? ??? ?unset VAR ?? ??? ??? ?echo $VAR // 输出 空值 ?? ??? ??? ? ?? ?9.shell中的位置变量 ?? ??? ?$0?? ?是脚本名 ?? ??? ??? ?三种不同的执行方式,得到的结果不一样 ?? ??? ??? ?./ ? ? 的方式执行 ? $0是 ./脚本名 ?? ??? ??? ?bash ? 的方式执行 ? $0是 脚本名 ?? ??? ??? ?source 的方式执行 ? $0是 bash ?? ??? ? ?? ??? ?$1?? ?执行脚本时 命令行传的第1个参数(不包括脚本名) ?? ??? ?$2?? ?执行脚本时 命令行传的第2个参数(不包括脚本名) ?? ??? ?... ?? ??? ?$n?? ?执行脚本时 命令行传的第n个参数(不包括脚本名) ?? ??? ? ?? ??? ?$@ $* 除去脚本外的所有参数 ?以空格分隔 ?? ??? ? ?? ??? ?$#?? ?除去脚本外的所有参数的个数 ?? ??? ? ?? ??? ?$??? ?返回上一条命令的结果,为0代表上一条命令执行成功了 ?为1代表失败了 ?? ??? ??? ?例如: passwd 其他用户 ?//用普通用户给其他改密码肯定会失败 ?? ??? ?
?? ?10.变量作用域的问题 ?? ??? ?shell中如果什么都不写,变量默认都是全局的, ?? ??? ?即使函数内部定义的变量作用域也是全局 ?? ? ?? ??? ?local ?限制变量的作用,只在最近的{}里生效 ?? ??? ??? ??? ? ?? ??? ?readonly ?修饰的变量是只读的 ?类似C语言的const
?? ?11.命令置换符 ?? ??? ?命令置换符可以将 命令 执行的结果赋值给变量 ?? ??? ? ?? ??? ?$() ?? ??? ??? ?例如: ?? ??? ??? ??? ?VAR=$(ls) ?? ??? ??? ??? ?echo $VAR ?? ??? ? ?? ??? ?`` ?----注意,这不是单引号 ?这是 键盘1左边的按键(tab键上面的按键) ?? ??? ??? ?例如: ?? ??? ??? ??? ?VAR=`ls` ?? ??? ??? ??? ?echo $VAR
?? ?
|