目录
7.1 shell基础知识
7.2 shell进阶
7.2.1 变量
7.2.2 运算符
7.2.3 shell脚本附带选项
Shell指一种应用程序,该应用程序提供一个界面,用户通过界面访问操作系统内核的服务。是一种命令语言,也是一种程序设计语言。常见的脚本有:Javascript,VBScript,ASP,JSP,PHP,SQL,perl,shell,python,ruby,javaFX,Lua等。
常见的shell种类:
Linux中默认的shell是:/bin/bash,流行shell的有:ash,bash,ksh,csh,zsh等。
1.csh “类C”具有C语言的风格。已被/bin/tcsh所取代。 |
2.ksh 具备了C shell的易用特点,许多安装脚本都使用ksh,与bash相比有一定的限制性。 |
3.tcsh 是csh的增强版,与C shell完全兼容。 |
4.sh 是一个快捷方式,已经被/bin/bash所取代。 |
5.nologin 指用户不能登录 #usermod -s /sbin/nologin aop #vim /etc/passwd |
6.zsh 目前linux中最庞大的一种shell,包含84个内部命令,一般情况下不使用该shell。 |
7.bash 大多数linux系统默认使用的shell,包含的功能几乎可以涵盖shell所具有的功能,一般的shell脚本都会指定它为执行路径。 |
Shell编写规范:
代码规范: #!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器] Shell相关指令 | ||
文件命名规范: 文件名.sh .sh是linux下的bash shell的默认后缀。 | ||
使用流程: 创建.sh文件 touch或vim指令 编写shell代码 执行shell脚本 脚本必须要有执行权限 | ||
案例1:创建test.sh,实现第一个shell脚本程序。 #touch test.sh 创建.sh文件 #vim test.sh 打开.sh文件
#chmod +x test.sh 添加执行权限 #ll test.sh 显示:-rwxr-xr-x. 1 root root 33 4月 test.sh #./test.sh 显示:hello world! (在当前目录中找) 案例2:使用root用户账户创建并执行test2.sh,实现创建一个shelltest用户,并在其家目录中新建文件try.html。 #touch test2.sh #vim test2.sh
#chmod +x test2.sh #/bin/bash test2.sh 脚本执行的另一种方式,/bin/bash脚本的路径(了解) #ls /home/shelltest 显示:try.html |
在使用变量时需要在变量名前加$符号。
案例3:定义一个变量,输出当前时间,要求格式为“年-月-日 时:分:秒”。 #touch test3.sh #vim ./test3.sh
#chmod +x test3.sh #./test3.sh 显示:2021-11-17 22:38:15 | |
只读变量 readonly 变量名 案例4:定义变量a并且其值为10,随后设置其为只读变量,再去尝试重新赋值。 #touch test4.sh #vim ./test4.sh
#chmod +x test4.sh #./test4.sh 显示:./test4.sh: line 4: a: readonly variable 10 | |
接收用户输入 read -p 提示信息 变量名 案例5:编写一个脚本test5.sh,要求执行之后提示用户输入文件的名称(路径),然后自动为用户创建该文件。 #touch test5.sh #vim ./test5.sh
#chmod +x test5.sh #./test5.sh | |
删除 unset 变量名 案例6:定义变量b=20,再输出b的值,随后删除b,最后再输出b。 #touch test6.sh #vim ./test6.sh
#chmod +x ./test6.sh #./test6.sh 第一行显示20,第二行没有数据但保留位置。 |
算术运算符:
加 | 减 | 乘 | 除 | 取余 | 赋值 | 相等 | 不等 |
+ | — | * | / | % | = | == | != |
注意:原生basn不支持简单的数学运算,但可以通过其他命令实现,例如:awk和expr,expr可以完成表达式的求职计算。其中表达式和运算符之间要有空格;完整的表达式被反引号~ ~包含起来。
echo ‘a + b = ’ ~ expr $a +$b ~
关系运算符:
-eq | -ne | -gt | -lt | -ge | -le |
相等 (equal) | 不等 (not equal) | 大于 (great than) | 小于 (less than) | 大于等于 (great than or equal) | 小于等于 |
逻辑运算符:
与 (且) | 或 | 非 (取反) |
-a and | -o or | ! |
字符串运算符:
= | != | -z (zero) | -n | srt |
判断两字符串是否相等 | 检测字符串长度是否为0 | 检测字符串是否为空 |
文件测试运算符:
-d file路径 | -f file路径 | -r | -w | -x | -s | -e |
检测文件是否为目录 | 检测文件是否为普通文件 | 是否可读 | 是否可写 | 是否可执行 | 检测文件是否为空 | 检测文件是否存在 |
传递:#./test.sh a b c
接收:在脚本中用$加序号来表示对应的值。如:$1表示a,$2表示b。
练习:创建自定义指令“user”,可以直接执行,要求该指令具备以下语法和功能:
#user -add 用户名 (添加用户)
#user -del 用户名 (删除用户及其家目录)
1.编写指令
2.添加别名 alias user =’/root/test.sh’ |