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

 

 

posted @ 2019-05-31 19:18  jiahuifeng  阅读(291)  评论(0编辑  收藏  举报