shell基础
1、shell介绍
通常说的shell就是shell脚本,他是一门脚本语言,弱类型
2、shell规范
第一行内容为#!/bin/bash
#注释
文件以“.sh”结尾的文件
3、shell语法
变量
1、变量名=变量值(等于号两遍没有空格) a=xiaohuihui
2、变量名规范:不能以数字开头,字母、数字、下划线组成
3、输出变量内容 echo $变量名 echo $a
4、变量的释放 unset 变量名
5、特殊的变量,带有空格的变量定义
双引号“” :如果变量值中存在$+变量名的话,输出变量名对应的变量值,想要原样输出的话,可以转义符\
单引号‘’ :如果变量值中存在$+变量名的话,将原样输出
反单引号`` :存放的是命令
通过键盘输入 read read 变量名
1、变量名可以有一个或者多个,变量名用空格隔开,变量值用空格隔开
2、如果变量值多余变量名,那么将会把多余的变量值给最后一个变量
3、可以添加提示信息:read - p“提示内容” 变量名
参数传递:向.sh文件传递数据
文件中接收参数的方式:$1---->表示第一个参数
$2---->表示第二个参数
$n---->表示第n个参数
$0---->代表文件名
$@:显示全部参数
$#:显示参数个数
重定向 :把命令的内容输出到文件中
正确的命令
覆盖 命令 1>文件名 例: ls 1>a.txt
追加 命令 1>>文件名 例: ls 1>>a.txt
错误的命令
覆盖 命令 2>文件名 例: ls 2>a.txt
追加 命令 2>>文件名 例: ls 2>>a.txt
程序结构
分支结构(判断root目录下是否为空)
#!/bin/bash cd /root num=`ls -l|wc -l` if [ $num == 0 ] then echo "yes" else echo "no" fi
例题
#!/bin/bash read score if [ $score -ge 90 ] then echo "优秀" elif [ $score -ge 80 -a $score -lt 90 ] then echo "良好" elif [ $score -ge 70 -a $score -lt 80 ] then echo "一般" elif [ $score -ge 60 -a $score -lt 70 ] then echo "及格" else echo "不及格" fi
逻辑运算符: 且(-a) 或(-o) 非(!)
数字比较运算符:相等(-eq) 不相等(-ne) 大于(-gt) 大于等于(-ge) 小于(-lt) 小于等于(-le)
数字变量操作:((i++)) ((i+=1)) i=$[$i+1] let i=i+1 i=$(($i+1)) --------》》 表示 i=i+1
测试文件的状态: test 参数 变量名 参数(-e表示文件书否存在 -f表示文件是否存在且为文件 -d表示文件名是否存在且为目录 -r可读 -w可写 -x可执行)
题目:判断用户输入的目录是否存在,如果存在统计目录下的文件个数,否则提示该用户目录不存在
#!/bin/bash #用户输入目录 read -p "请输入检查的目录:" dir if test -d $dir then num=`ls -l $dir|wc -l` echo "目录下存在$num个文件" else echo '目录不存在' fi
case分支
例:输入一个序号,判断该用户选择哪款产品,A:笔记本 B:电饭煲 C:小台灯
!/bin/bash #提示用户输入序号 read -p "请输入序号:" num case $num in "A") echo "笔记本";; "B") echo "电饭煲";; "C") echo "小台灯";; esac
for 循环
例:输出1-10之间的数(seq start(起始点) size(步长) max(结束点))
#!/bin/bash for num in `seq 1 1 10` do echo $num done
while循环
例:求1-100之间的和
#!/bin/bash sum=0 i=1 while [ $i -ge 1 -a $i -le 100 ] do sum=$(($sum+$i)) let i=i+1 done echo $sum
函数(函数正确时返回0错误时返回1,查看返回值内容:$?)
#!/bin/bash #定义函数 hello(){ echo "helloword" } #调用函数 hello
#!/bin/bash #函数传参 add(){ echo "第一个数是$1" echo "第二个数是$2" sum=$(($1+$2)) echo "两数之和为$sum" } read -p "请输入第一个数" a read -p "请输入第二个数" b add $a $b
练习:输入一个目录,判断目录是否存在,如果不存在则给出提示,如果存在就提示输入要创建的文件名称,接下去判断要创建的文件是否存在,,如果不存在则继续创建,否则提示该文件已存在
#!/bin/bash checkdir(){ if test -d $1 then cd $1 read -p "请输入要建的文件名称" filename else echo "目录不存在" fi } checkfile(){ if test -f $1 then echo "文件已经存在" else p=`touch $1` fi } read -p "请输入一个目录" dir checkdir $dir checkfile $filename