shell脚本必须以#!/bin/bash/开头 (相当于c语言 #include<stdio.h>),shell脚本文件后缀为sh,没有也行,Linux对后缀没明确要求
脚本需要有可执行权限(chmod赋予权限),那样可以用./shell文件 执行,不然就用sh shell文件 执行(相对绝对路径都可)
Linux Shell 中的变量分为,系统变量和用户自定义变量。
系统变量:$HOME、$PWD、$SHELL、$USER 等等,比如: echo $HOME 等等..
显示当前 shell 中所有变量:set
定义变量用 变量名=值,等号两侧不能有空格,变量名一般用大写字母定义(只是规范,小写的也可以运行),输出变量需要加上$输出,例:A=100 echo $A
撤销用unset 变量名
readonly定义静态变量 静态变量不可撤销
注释:单行用#,
多行用
:<<!
注释内容
!
用反引号获取返回值 例 A='date',A=$(date) 等价于反引号
设置环境变量(定义全局变量在在/etc/profile文件中写)
1) export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量/全局变量)
2) source 配置文件 (功能描述:让修改后的配置信息立即生效)
3) echo $变量名 (功能描述:查询环境变量的值)
位置参数变量
介绍:当我们执行一个 shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如 : ./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息(相当于其它语言的函数传参)
语法:$n (功能描述:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用
大括号包含,如${10})
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)
运算符
基本语法
1) “$((运算式))”或“$[运算式]”或者 expr m + n
2) 注意 expr 运算符间要有空格, 如果希望将 expr 的结果赋给某个变量,使用 ``
3) expr m - n
4) expr \*, /, % 乘,除,取余
#!/bin/bash #案例 1:计算(2+3)X4 的值 #使用第一种方式 RES1=$(((2+3)*4)) echo "res1=$RES1"
#使用第二种方式, 推荐使用 RES2=$[(2+3)*4] echo "res2=$RES2"
#使用第三种方式 expr TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"
条件判断
判断语句
基本语法
[ condition ](注意 condition 前后要有空格)
#非空返回 true,可使用$?验证(0 为 true,>1 为 false)
应用实例
[ asd ] 返回 true
[ ] 返回 false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句
判断语句
常用判断条件
1) = 字符串比较
2) 两个整数的比较
-lt 小于
-le 小于等于 little equal -eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
3) 按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
4) 按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
if判断基本语法
if [ 条件判断式 ]
then
代码
elif [条件判断式]
then
代码
fi
case语句
for循环
while语句(while 和 [有空格,条件判断式和 [也有空格)
#!/bin/bash #案例 1 :从命令行输入一个数 n,统计从 1+..+ n 的值是多少? SUM=0 i=0 while [ $i -le $1 ] do SUM=$[$SUM+$i] #i 自增 i=$[$i+1] done echo "执行结果=$SUM"
read 读取控制台输入
基本语法
read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
参数
变量:指定读取值的变量名
#!/bin/bash #案例 1:读取控制台输入一个 NUM1 值 read -p "请输入一个数 NUM1=" NUM1 echo "你输入的 NUM1=$NUM1" #案例 2:读取控制台输入一个 NUM2 值,在 10 秒内输入。 read -t 10 -p "请输入一个数 NUM2=" NUM2 echo "你输入的 NUM2=$NUM2"
自定义函数
#!/bin/bash/ #定义函数 getSum function getSum() { SUM=$[$n1+$n2] echo "和是=$SUM" } #输入两个值 read -p "请输入一个数 n1=" n1 read -p "请输入一个数 n2=" n2 #调用自定义函数 getSum $n1 $n2