1 什么是shell ?
平时我们经常在 Linux 操作系统中使用各种命令,比如查看当前的目录文件,我们会使用 "ls" 或者 "ls -l",这些字符串参数实际上会被"shell"执行并启动。shell负责将用户输入的字符串转换为需要执行程序。即帮用户更方便使用操作系统接口的“壳”。
2 第一个shell之 hello word
2.1 创建文件: vi 创建并打开一个文件,hello.sh, 扩展名为.sh。
2.2 编辑内容:
#!/bin/bash
echo "Hello word !"
注:#!/bin/bash 告诉系统使用什么解析器,echo输出内容
2.3 执行
方法一: 赋予可执行权限 再执行
chmod +x ./hello.sh ./hello.sh
方法二: 调用/bin/sh终端执行
/bin/sh hello.sh
3 变量
3.1 注意事项
- 变量名和等号之间不能有空格
- 命名首个字符不能是数字,只能使用英文字母、数字和下划线
- 不能使用标点符号
- 不能使用bash中关键字
3.2 变量使用
使用变量(使用变量的过程中,最好加上花括号),只需要在变量前面加上美元符号即可
#!/bin/bash
val1="Hello word !"
echo ${val1}
3.3 只读变量
使用 readonly 定义变量即为只读,不能改变
#!/bin/bash
val1="Hello word !" readonly
echo ${val1}
3.4 变量删除
#!/bin/bash
val1="Hello word !"
unset val1
echo ${val1} #不会有输出
3.5 变量作用域
-
局部变量:仅当前shell可用
-
环境变量:所有程序都能访问环境变量
-
shell变量:通过一部分环境变量和
shell变量保证shell的正常运行
3.6 变量类型
3.6.1 字符串
- 使用字符串的过程中,既可以用双引号也可以用单引号,也可以不用
- 单引号内容原样输出,不能包含变量,且不能出现单独单引号
- 双引号可以出现转义字符
#!/bin/bash
name='zhagnsan'
str=" \"$name \" Hello word !"
echo -e ${str}
3.6.2 字符串长度
使用
#获取字符串长度
#!/bin/bash
name='zhagnsan'
str=" \"$name \" Hello word !"
echo -e #{str}
3.6.3 数组
支持一维数组,读取数组,使用
@输出数组所有元素
#!/bin/bash
array=(value1,value2,value3)
#读取数组
echo ${array[0]}
#使用@输出数组所有元素
echo ${array[@]}
获取数组中所有元素以及数组长度
#!/bin/bash
array=(value1,value2,value3)
#读取数组
echo ${array[0]}
#使用@输出数组所有元素
echo ${array[@]}
#输出数组个数
echo ${#array[@]}
3.7 shell传递参数
在执行shell的时候,命令行指定参数,如: ./hello.sh 1 2
#!/bin/bash
name='zhagnsan'
str=" \"$name \" Hello word !"
echo "执行文件名为:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
@和*的区别 : ./demo.sh 1 2 3
相同点:都是会引用所有参数
不同点:在使用双引号的时候。如果脚本运行时两个参数为a,b,则"*"等价于"ab",而"@"等价于"a","b"
#!/bin/bash
name='zhagnsan'
str=" \"$name \" Hello word !"
for i in "$*";
do
echo $idone
for i in "$@";
do
echo $idone
3.8 printf
使用
printf格式化字符串,同时可以指定字符串宽度和对齐方式,格式如下
4 test
shell中的test用于检查某个条件是否成立
特殊字符含义:
- ?# : 传递到脚本的参数个数
- $* :以一个单字符显示所有向脚本传递的参数
- ‘$$’:脚本运行的当前进程Id
- ‘@:与@ :与@:与*相同,但是使用时候加引号,并在引号中返回每个参数
- $- :显示shell使用的当前选项
- $? :显示最后命令的退出状态,0表示没有错误,其他值都表示有错
test判断
- -eq 等于
- -ne 不等于
- -gt大于
- -lt 小于
- -le 小于等于
#!/bin/bash
a=22
b=33
if test $[a] -eq $[b]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
5 if else-if else
#!/bin/bash
if 条件1
then
任务1
elif 条件2
then
任务2
else
任务3
fi
6 for 循环
#!/bin/bash
for i in 1 2 3 4 5 6 7 8
do
echo "遍历:$i"
done
7 while 语句
通常用于从输入文件不断读取数据
用法:
while 条件
do
任务
done
案例:
用法:
#!/bin/bash
i=1
while (($i<=10))
do
echo $i
let "i++" #用于执行一个或者多个
done
8 case 语句
多选择语句。取值后面为单词in,每一个模式以")"结束。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ";;"。
用法:
#!/bin/bash
echo "输入1到3之间的数据"
echo "你输入的数据为:"
read num
case $num in
1) echo "你输入 1 "
;;
2) echo "你输入 2 "
;;
3) echo "你输入 3 "
;;
*) echo "没有输入1到3的数字"
;;
esac
9 跳出循环
break:命令允许跳出所有循环
continue:跳出当次循环
10 shell函数
用法:
[function] 方法名 [()]
{
action;
[return int ;]
}
案例:
#!/bin/bash
Fun1(){
echo "这是一个shell函数!"
}
echo "shell函数开始执行"
Fun1
echo "shell函数执行完成"