目录
Shell简介:
- Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁;
- Shell既是一种应用程序,又是一种程序设计语言;
- 作为应用程序:
- 我们称之为shell命令解析器;
- shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层;
- 用户在提示符下输入的命令都由shell先解释然后传给Linux核心,它调用了系统核心的大部分功能来执行程序、并以并行的方式协调各个程序的运行;
- Linux系统中提供了好几种不同的shell命令解释器,如sh、ash,bash等;
- linux系统一般默认使用bash作为默认的解释器。
- 作为程序设计语言:
- 我们称之为shell脚本;
- 不同于我们学过的c/c++等语言,他不是一种编译性语言,即编写完成后需要使用编译器完成编译、汇编、链接等过程变为二进制代码方可执行;
- shell脚本是一种脚本语言,我们只需使用任意文本编辑器,按照语法编写相应程序,增加可执行权限,即可在安装shell命令解释器的环境下执行;
- shell脚本主要用于:帮助开发人员或系统管理员将复杂而又反复的操作放在一个 文件中,通用简单的一步执行操作完成相应任务,从而解放他们的负担。
第一个shell脚本:
步骤:编译、保存、改权限、运行/排错
常见的shell脚本存放在/etc/shells目录下

vi hello.sh(创建文件,以.sh结尾)
- 首行定义:#!/bin/bash;(#!用来声明脚本由什么shell解释,否则使用默认shell)
- 单个"#"号代表注释当前行。
#!/bin/bash
echo "hello,world"
chmod +x hello.sh(给执行权限)
运行shell:
- ./
- 指定编译器运行
- source或.
Shell的脚本变量:
定义自己的变量:
变量名=变量值
例如:num=10
引用变量:
$变量名
例如:i=$num 把变量num的值赋给变量i
显示变量:
使用echo命令就可以显示单个变量的取值
清除变量:
使用unset命令清除变量
unset num
注意事项:

变量的特殊用法:
注意:最后一个指令必须使用source xxx.sh才可以生效
预定义变量:

脚本变量的特殊用法:
条件测试:
(具体代码见示例)
控制语句与函数:
if语句、case语句、for语句、while语句、函数(与C语言都十分类似,具体用法见代码示例)
代码示例:
test1.sh
#!/bin/bash
#获得当前脚本的文件名
echo "$0"
#传递给脚本的参数
echo "$1"
echo "$2"
#传递给脚本的参数的数量
echo "$#"
#传递给脚本的所有参数
echo "$*"
#当前shell的进程ID
echo "$$"
test2.sh
#!/bin/bash
read -p "please input num1:" num1
read -p "please input num2:" num2
#-eq 判断数值是否相等
#-ne 判断数值是否不相等
#-gt 判断数值是否大于
#-lt 判断数值是否小于
#-ge 判断数值是否大于等于
#-le 判断数值是否小于等于
#-z str 判断字符串str是否为空
#-n str 判断字符串str是否为非空
#-d filename 判断文件是否存在并且是否为目录文件
#-f filename 判断文件是否存在并且是否为普通文件
[ $num1 -gt $num2 ] && echo "num1>num2"
test3.sh
#!/bin/bash
echo "please input num1:"
read num1
echo "please input num2:"
read num2
if (($num1>$num2))
then
echo "num1>num2"
elif (($num1==$num2))
then
echo "num1=num2"
else
echo "num1<num2"
fi
test4.sh
#!/bin/bash
echo "please input num1:"
read num1
case $num1 in
1)
echo "num1=1"
;;
2)
echo "num1=2"
;;
3)
echo "num1=3"
;;
*)
echo "no this num"
exit 1
esac
test5.sh
#!/bin/bash
#declare 是bash的一个内建命令,可以用来声明shell变量,设置变量的属性。declare也可以写做typeset
#declare -i sum 代表强制把sum变量作为int型参数运算
declare -i sum
for (( i=1;i<=100;i=i+1 ))
do
sum=sum+1
done
echo "result is $sum"
test6.sh
#!/bin/bash
#for i in 1 2 3 4 5 6 7 8 9
#for i in {1..9}
#for i in `ls`
#for i in "$*"
for i in "$@"
do
echo "$i"
done
test7.sh
#!/bin/bash
num=0
declare -i s
while (( num<10 ))
do
echo "$num"
num=$(( num+1 ));
s=s+1
done
echo "$s"
test8.sh
#!/bin/bash
inputnum()
{
if (( $#!=1 ))
then
echo "please input a num"
elif (( $1<100 ))
then
echo "num<100"
else
echo "num>=100"
fi
}
echo "please inuput a num:"
read num
inputnum $num