什么是Shell:
Shell 是一个用 C 语言编写的程 序,它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言,又是一种 程序设计语言。操作shell的是ShellScript。可以这样理解:
Linux 的 Shell 种类众多,常见的有:
• Bourne Shell(/usr/bin/sh或/bin/sh)
• Bourne Again Shell(/bin/bash)
• C Shell(/usr/bin/csh)
• K Shell(/usr/bin/ksh)
• Shell for Root(/sbin/sh)
运行Shell的方式和区别
1、子Shell方式: ./Shell文件名 /bin/sh Shell文件名 (作为解释器参数) 修改Path路径后直接调用文件名
2、全局Shell方式 source Shell文件名 . Shell文件名
变量的命名规则:
• 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
• 中间不能有空格,可以使用下划线(_)。
• 不能使用标点符号。
• 不能使用bash里的关键字(可用help命令查看保留关键字)。
注意,变量名和等号之间不能有空格
Shell 使用变量:
• 定义变量直接书写其名字后跟赋值号“=”
• 使用一个定义过的变量,需要在变量名前加“$”符号 km="20" echo $km echo ${km}
• 变量名外面的花括号是可选的,是为了帮助解释器识别变量的边界: echo "have ${km}Km."
Shell 删除变量:
unset variable_name
Shell 变量常用的数据类型:
• Shell 字符串: 字符串是shell编程中最常用的数据类型,字符串可以用单引号,也可以用双引 号,也可以不用引号。
• 双引号:可以使用转意字符和引用变量 your_name='ywb' str="Hello, I know you are \"$your_name\"! \n" echo -e $str
• 单引号:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
Shell 字符串的操作:
• 字符串的拼接: 直接书写即可
• 获取字符串长度: ${#变量名}
• 查找字符位置: expr index $变量名 “需要查找的字符”
注意:可以是多个字符,找到哪个优先输出哪个的位置,找不到为 0 。
两个常用的表达式命令:
• expr 用于表达式直接计算
• let 用于数值表达式赋值
Shell 数组:
一组变量 数组中可以存放多个值;初始化时不需要定义数组大小;元素的下标由0开始。
注意: Bash Shell 只支持一维数组(不支持多维数组)
-
数组的赋值:
• 枚举式赋值: array=(1 3 6 4 2) 注意:元素之间以空格分割
• 访问下标指定元素赋值: array[0]=10 array[1]=20 … 数组元素的访问: ${array[index] -
获取数组长度:
• echo ${#array[]}
• echo ${#array[@]} 获取数组中的所有元素:
• echo ${my_array[]}
• echo ${my_array[@]}
Shell 支持多种运算符:
• 算数运算符
• 关系运算符
• 布尔运算符
• 字符串运算符
• 文件测试运算符
注意:原生bash不支持简单的数学运算,但是可以通过其他命令来实现。 例如 awk 和 expr,expr 最常用。
如果想使用命令的结果可以用反引号(``)或者$()
Shell 算数运算符:
Shell 关系运算符: 关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
Shell 布尔运算符:
逻辑运算符:
字符串运算符:
文件测试运算符:文件测试运算符用于检测 Unix 文件的各种属性
Shell中 echo 和 printf 命令 printf命令: 模仿 C 程序里的 printf()
• 输出变量字符串信息: printf “this is $varName\n”
• 格式化输出: printf “%05.2f%%\n” 2.356
常用替换格式: %s(字符串) %d(整数) %f(小数)
常用转意字符: \n(换行) \t(制表) \r(回车) %%(一个百分号)
常用格式字符: -(左对齐,默认是右对齐) 0(0补位) +(输出正负号) n(整数值、字符串格式位) m.n(浮点数格式位)
Shell中 test 命令: test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件的测试。
对数值的判断: test $[a] -eq $[b]
对字符串的判断: test $str1==$str2
对文件的判断: test -e /bin/sh
Shell流程控制: 流程控制是构成脚本编程的基本单元,即分支和循环。
分支:根据逻辑判断分情况执行的基本语法
• if分支语法
• case分支语法
循环:有限次重复执行某个逻辑
• for循环
• while循环
• until循环
if分支语法
if condition1
then command1
elif condition2
then command2
else commandN
fi
case分支语法:
case 值 in
模式1) command
;;
模式2)
;;
*)
;;
esac
for循环: items 可以是列表、数组、命令结果等
for var in item1 ... itemN
do
command1
command2
...
commandN
done
while循环: 循环执行一系列命令直至条件为 false 时停止
while condition
do
command
done
until循环: 循环执行一系列命令直至条件为 true 时停止
until condition
do command
done
注意:跳出循环的break; 跳过本次循环的continue
**Shell函数函数:**是自定义的一段逻辑过程,可以反复调用
[ function ] funname() {
action;
[return int;]
}
注意:若传参,则使用 $1-N 获取参数(与向脚本传参一致)
外部Shell script的引入 Shell 也可以包含外部脚本。这样可以很方便的封装一些公用 的代码作为一个独立的文件。
. filename # 注意点号(.)和文件名中间有一空格 或 source filename