Linux基础之shell脚本

本文详细介绍了shell脚本的基础知识,包括脚本本质、创建步骤、变量类型(用户自定义、位置、预定义和环境)、输入输出、算术运算、表达式测试、程序结构(if、case、for、while)以及函数的使用和参数传递。
摘要由CSDN通过智能技术生成

一、了解什么是shell脚本

        shell脚本的本质就是 shell命令的有序集合 ,它属于一种解释型语言,不需要编译,方便操作者对重复性的劳动进行编程,同时shell脚本也是一种无类型语言,其变量没有类型或字符串类型 
    
  注意事项:  对标点符号 和 格式 非常严格 特别是空格
  

 
二、创建一个shell脚本的步骤 


1. 创建一个普通文件,通常后缀.sh 
    touch  hello.sh 
    
2. 修改权限 添加可执行权限     
    chmod 777 hello.sh    

3. 写脚本 
    vim hello.sh

注:任何一个脚本文件的第一行都必须写: #!/bin/bash 

4. 运行脚本  ./hello.sh 

eg:写一个创建脚本的  创建1.sh

#!/bin/bash

#创建名为1.sh的脚本文件
touch 1.sh
#修改权限
chmod 777 1.sh
#在终端打印hello world
echo "hello world"

三、shell脚本中的变量

        变量:  多用于代指文件名,即各种名字或参数命令等 

        1、用户自定义变量:    
                                        变量定义  变量名=值     等号两边 没有空格 
                                        变量使用  引用其值   $变量名    本质是字符替换

        2、位置变量: 
                                $0   运行脚本的指令本身 
                                $1,$2,……$9  分别包含第一个到第九个命令行参数

        3、预定义变量:  有终端预先定义的一些变量 
                由系统保留和维护的一组特殊的变量,这些变量通常用于保存程序运行状态等
 
                $#    包含命令行参数的个数
                $@    包含所有命令行参数:“$1,$2,……$9”
                $?    包含前一个命令的退出状态
                $*    包含所有命令行参数:“$1,$2,……$9”
                $$    包含正在执行进程的ID号

        4、环境变量:  一组存储终端环境参数的变量 

注:export 命令可以打印输出 终端所有的环境变量 

        PWD  存储当前工作路径 
        USER 存储当前终端的登录用户
        HOME 存储当前用户的家目录 
        PATH 存储当前终端 的命令搜索路径 

eg:编写一个脚本文件来创建一个新的脚本

#!/bin/bash

#定义一个变量
#NAME=if.sh

#定义位置变量
NAME=$1

echo 正在创建$NAME文件
touch $NAME
echo 正在配置文件
chmod 777 $NAME
echo 正在写入第一行
echo "#!/bin/bash" > $NAME
echo $NAME文件创建成功!

结果展示:

 

四、shell脚本的 输入输出


        输入:echo 输出字符串 
        输出:read 从终端读取字符串

五、shell中 的算数运算 

        expr 数学表达式  

注:1、 每个符号与数值 间都要有空格分开 

       2、shell脚本支持  +  -  \*   /   %    但只能做整数运算不能做小数运算 

六、shell 表达式 


        1、字符串测试
            s1 == s2   测试两个字符串的内容是否完全一样
            s1 != s2  测试两个字符串的内容是否有差异
            -z s1   测试s1 字符串的长度是否为0
            -n s1   测试s1 字符串的长度是否不为0
 
        2、整数测试
                a -eq b     测试a 与b 是否相等
                a -ne b     测试a 与b 是否不相等
                a -gt b      测试a 是否大于b
                a -ge b     测试a 是否大于等于b
                a -lt b       测试a 是否小于b
                a -le b      测试a 是否小于等于b
 
                -d name      测试name 是否为一个目录
                -e name      测试一个文件是否存在
                -f name       测试name 是否为普通文件
                -L name      测试name 是否为符号链接
                -r name       测试name 文件是否存在且为可读
                -w name      测试name 文件是否存在且为可写
                -x name       测试name 文件是否存在且为可执行
                -s name       测试name 文件是否存在且其长度不为0
                f1 -nt f2        测试文件f1 是否比文件f2 更新
                f1 -ot f2        测试文件f1 是否比文件f2 更旧 

七、shell中的程序结构


         1、 if 结构 


                if [ 表达式 ]
                then 
                    命令块1
                else 
                    命令块2
                fi

注:如果没有else 可以省略 ,则if结构可写为:
        if [ 表达式 ]
        then 
            命令块1
        fi

eg:输入一个文件名,判断该文件是否存在, 若存在则判断是否为普通文件且是空的,若是则删除它 

#!/bin/bash

#echo "请输入一个文件名"
#read FILE
FILE=$1
if [ -z $FILE ]
then
	echo "UseAge:该脚本用于删除一个空的普通文件"
	echo "需要指定一个文件名参数"
else 
	echo "正在操作$FILE"

	if [ -e $FILE ]
	then
		echo "文件存在"
		if [ -f $FILE ]
		then
			echo "是普通文件"
			if [ -s $FILE ]
			then
				echo "文件有内容"
			else 
				echo "文件没有内容, 删除$FILE"
				rm $FILE
			fi
		fi
	fi

fi

结果展示:

2、case 多分支结构 

               case $变量名 in
                            值1) 命令块1
                             ;;
                            值2) 命令块2
                            ;;
                            ...
                            *) 命令块n
                esac

运行逻辑 :将变量中字符串与括号左边的字符串比较相等就执行后面的命令块,若不相等 ,继续向后比较 
注:值可以使用通配符

eg:输入成绩,判断输入的成绩的优良中差并输出

#!/bin/bash

echo "请输入你的成绩:"

read cj 
case $cj in
	100) echo "满分优秀!"
	;;
	9?) echo "成绩优秀"
	;;
	8?) echo "成绩良好"
	;;
	[67]?) echo "成绩及格"
	;;
	*) echo "成绩不及格"
esac

结果展示:

  

 

3、for循环

        结构1:

                        for (( I=0;I<10;I++ ))
                        do 
                                    循环命令块
                        done 

eg: 创建10个文件  文件名为 file_数.txt 

#!/bin/bash

for ((I=0;I<10;I++))
do
	touch file_$I.txt
done

结果展示:

       

          结构2: 
                        for 变量名  in  取值列表
                        do 
                                    循环命令块
                        done

注:取值列表中是以空格、回车等分隔开的字符串,每次循环变量的值就是取值列表中的一个 ,并且是顺序的  

eg: 打印输出当前目录中 所有.sh 文件都打印出来

#!/bin/bash

#file=$1
for file in `ls *.sh`
do 
	echo "  $file  "
done

结果展示:

 

 

eg: 写一个脚本,实现将当前目录中所有的、空的、普通文件删除  

#!/bin/bash

for file in `ls *`
do
    echo " $file "
	if [ -e $file ]
	then
		echo "文件存在"
		if [ -f $file ]
		then 
			echo "普通文件"
			if [ -s $file ]
			then
				echo "有内容"
			else
				echo "没有内容,删除$file"
				rm $file
			fi
		fi
	fi
done

4、while循环

        while [ 条件表达式 ]
         do 
                    循环语句块
         done

注:shell中的while与C中的运行逻辑完全一样 

八、循环控制语句  

            break
            continue

注:shell中的循环控制语句与C中的break和continue关键字的效果完全一样
   

九、了解shell 的函数 

       1、 函数定义: 
                        函数名()
                        {
                                    命令块 
                        }

        2、函数调用 :
                                函数名

         3、参数传递: 使用位置变量 

eg:在终端打印hello world并计算1+2的值

#!/bin/bash

func()
{
	echo "hello world"
	return 0
}

sum()
{
	a=`expr $1 + $2`
	echo a=$a
	return 0
}

#调用函数func
func
#使用命令置换方式调用sum函数
#A=`sum 1 2`
sum 1 2
#echo A=$A


结果展示:

 

  • 27
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值