1、Shell 是一个用C语言编写的程序,它是用户使用 LInux 的桥梁。是一种命令语言也是一种程序设计语言。
2、创建一个 shell 脚本可以使用 vi/vim 新建一个文件 test.sh ,扩展名为 sh(sh 代表shell)
#!/bin/bash
echo “hello world !"
3、运行 Shell 脚本的方法
4、定义变量
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
局部变量
环境变量
shell变量
="runoob is a great company"
`expr index "$string" is` # 输出 8
#、####
、%%%%
9、Shell 传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n
特殊字符用来处理参数:
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
9、Shell 基本运算符
注意使用的是反引号 ` 而不是单引号 ‘):
$((表达式)), "*" 不需要转义符号 “\” 否则在Windows系统下需要加上转义符号 “ / “ 。
算数运算符:
+ | 加法 | |
- | 减法 | `expr $a - $b` 结果为 -10。 |
* | 乘法 | |
/ | 除法 | |
% | 取余 | |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
[$a==$b][ $a == $b ],完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号
关系运算符:
关系运算符只支持数字,不支持字符串。除非字符串的值是数字。
-eq | 检测两个数是否相等,相等返回 true。 | |
-ne | 检测两个数是否相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
布尔运算符
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | |
-a | 与运算,两个表达式都为 true 才返回 true。 |
逻辑运算符
[[ $a -lt 100 && $b -gt 100 ]] 返回 false | ||
|| | 逻辑的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
字符串运算符
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否相等,不相等返回 true。 | |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否为0,不为0返回 true。 | [ -n $a ] 返回 true。 |
str | 检测字符串是否为空,不为空返回 true。 |
文件测试运算符
用于检测 UNIX 文件的各种属性
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | |
-p file | 检测文件是否是有名管道,如果是,则返回 true。 | |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | |
-r file | 检测文件是否可读,如果是,则返回 true。 | |
-w file | 检测文件是否可写,如果是,则返回 true。 | |
-x file | 检测文件是否可执行,如果是,则返回 true。 | |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 |
10、Shell echo 命令
#! /bin/bash
printf "%-5s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-5s %-8s %-4.2f\n" 郭靖 男 66.1234
12、流程控制
13、函数
#!/bin/bash
demoFun(){
}
// 带有 return 语句的函数
}
// 带有参数的函数
"第一个参数为 $1 !"
"第二个参数为 $2 !"
"第十个参数为 $10 !"
"第十个参数为 ${10} !"
"第十一个参数为 ${11} !"
"参数总数有 $# 个!"
"作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
参数处理 | 说明 |
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
文章来源: Shell 学习随笔