07-16 shell编程,基本语句

基本过程

  1. 创建shell文件
    后缀为.sh
  2. 赋予shell文件执行权限
  3. 执行shell文件
    两种方式
    ./文件名
    bash 文件名

创建

  • 第一行为#!/bin/bash,换行切回命令行模式用o换行

shell变量

  • shell允许用户简历变量存储数据,但不支持数据类型,将任何赋给变量的值都解释为一串字符
  • shell变量赋值时=前后不允许有空格
  • ehco用于打印
  • $用于取值
  • 命令置换时的命令用``括起来(esc下面的小点)
  • unset删除变量

预定义变量 位置变量

  • $0与键入的命令行一致
  • $1~$9为第一个到第九个命令
  • $10以上时为${10}
  • $# 为命令行传的参数总量
  • $*$@为将所传的所有命令行参数打印
  • $?为上一条的命令退出状态
  • $$打印进程ID号

shell常用的环境变量

  • HOME 打印家目录
  • PATH 每次工作的搜索路径
  • IFS 默认为空格,tab及换行符
  • PS1,PS2默认提示符($)及换行提示符(>)
  • TERM 终端类型

shell程序和语句

  • 说明性语句
    以#号开始到该行结束,不被解释执行

  • 功能性语句

  • 结构性语句

  • exit 0用以退出

功能性语句

  • read 类似scanf,输入语句,输入多个时,以空格隔开即可

    #!bin/bash
    
    read year month day
    echo $year-$month-$day
    

    read同时可以兼顾打印

    #!bin/bash
    
    read -p "input year month day" year month day
    echo $year-$month-$day
    
  • expr命令,算术命令,主要用于进行简单的整数运算

    #!bin/bash
    
    read -p "input two number " val1 val2
    num=`expr $val1 + $val2`
    #用变量值时要加上$符号
    echo $num
    
    num=`expr $val1 - $val2`
    echo $num
    #每一个算术左右两边都要有空格
    
    num=`expr $val1 \* $val2`
    #shell编程中*需要前面加\进行转义,小括号也需要\( \)
    echo $num
    
    num=`expr $val1 / $val2`
    echo $num
    
    num=`expr $val1 % $val2`
    echo $num
    
    #expr自带输出打印功能
    
  • test语句,测试语句,通过$?来判断上一天是否执行

    #!/bin/bash
    
    #对于字符串的应用
    test "hello" = "hello"
    echo $?
    #0为真
    
    test "hello" = "hell"
    echo $?
    #返回1,假
    
    test "hello" != "hell"
    echo $?
    #返回0,真
    
    test -z "hello"
    echo $?
    #-z判断字符串是否长度为0,故返回1
    
    test -n "hello"
    echo $?
    #-n判断字符串是否长度不为0,故返回0
    
    
    #对于整数的应用
    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更旧
    

结构型语句

主要包括条件测试语句,多路分支,循环语句,循环控制语句

  • 条件语句

    if 表达式
    then 
    	命令表
    elif 表达式
    then
    	命令表
    else
    	命令表
    fi
    

    类比

    if(){
    	...
    }
    else if(){
    	...
    }
    else{
    	...
    }
    
    if test -f $filename
    then
    	......
    #test可以替换成[],[]的前后需要加空格
    elif [ -f $filename ] 
    then 
        .....
    else
    	命令表
    fi 
    

多路分支语句

  • case...esac

    case 字符串变量 in	#case只能检测字符串变量
    	模式1)			#各模式中可用文件名元字符,以右括号结束
    		命令表
    		;;
    	模式2|模式3)	#一次可匹配多个模式,以'|'隔开
    		命令表2		#命令表以单独的双分号行结束,退出case语句
    		;;
    	......
    	模式n)			#模式n常写为字符*表示其他所有模式
    		命令表n
    		;;			#最后一个双分号行可以省略
    esac	
    

循环语句for

	for 变量名 in 单词表
	do
		命令表
	done 
  • 例:

    #!/bin/bash
    
    #for val in 1 2 3 4 5
    for ((val=1; val <= 5; val = $val + 1))
    do 
    	echo "val = $val"
    done
    #打印1-5
    
    for file in `ls`
    do
    	echo "---$file"
    done
    #打印当前目录下所有文件
    

循环语句while

while 命令或表达式	#为真时执行命令表,c语言写法时要用两个小括号(())同for
	do
		命令表
	done			#退出状态为命令表中被执行的最后一条命令的退出状态
  • #!/bin/bash
    
    NUM=0
    #while [ $NUM -lt 10]
    while (($NUM < 10))
    do
    	echo "*******$NUM"
    	NUM=`expr $NUM + 1`
    done
    

循环控制语句

	#!/bin/bash
	
	NUM=0
	#while [ $NUM -lt 10]
	while (($NUM < 10))
	do
		if [ $NUM -eq 3 ]
		then 
			break
			#continue
		fi
		echo "*******$NUM"
		NUM=`expr $NUM + 1`
	done

shell函数

类似c,把所有的外围看做main即可

#!/bin/bash

fun()
{
	echo "i am a function"
}

fun
  • 传参 直接放在函数后面即可,函数内用$1等读取

    #!/bin/bash
    
    fun()
    {
    	A=$1
    	B=$2
    	C=$3
    	echo "A = $A    B = $B    C = $C"
    }
    
    fun 1 2 3
    
  • shell中的函数也存在返回值,可以用$?进行打印

    #!/bin/bash
    
    fun()
    {
    	A=$1
    	B=$2
    	C=$3
    	NUM=`expr $A + $B + $C`
    	return $NUM
    }
    
    fun 1 2 3
    echo "\$? = $?"
    
  • shell函数中变量的作用域和c不同,shell的作用域为全局,将其变为局部变量可在变量前加local

    #!/bin/bash
    
    fun()
    {
    	local A=$1
    	B=$2
    	C=$3
    }
    
    fun 1 2 3
    echo "A = $A"
    echo "B = $B"
    echo "C = $C"
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值