Shell 编程快速入门

shell简介

  • 什么是shell编程?
    • 将终端下编写的命令等保存到文件中,就称为shell编程。
  • shell类型?
    • ash、bash、csh、ksh
    • 查看系统shell解析器:echo $SHELL
    • 当前系统可以shell解析器:/etc/shells文件
  • shell脚本的执行
    • 指定shell解析器执行指定脚本:bash hello.sh,不需要添加可执行权限
    • 将shell脚本作为可执行文件执行,必须添加可执行权限
      • 添加可执行权限:sudo chmod +x world.sh
      • 在脚本开头指定shell解析器:#! /bin/bash,其他位置的#表示注释
      • 执行脚本:
        • 在当前目录:./world.sh
        • 不在当前目录:/home/jerry/shell/world.sh

shell变量

  • 变量定义:name='dahua',’='两边不能有空格
  • 打印变量:echo $name 或 echo ${name}
  • 销毁变量:unset name,之后就不能再使用
  • 声明常量:readonly name='dahua'
  • 使用说明:’='两边不能有空格,只读变量不能修改

变量分类

  • 本地变量:只适用于当前shell的变量
  • 环境变量:适用于整个系统,通常都是纯大写的
    • 查看系统环境变量:env
    • 查看指定环境变量:echo $PATH
    • 若想在任意位置都可执行指定程序,可以将程序所在的路径添加到环境变量PATH。
    • 修改:
      • 单次:export PATH=$PATH:/home/jerry/shell
      • 永久:
        • 系统:/etc/profile
        • 用户:~/.profile、~/.bashrc、~/.bash_profile
        • 把导出的语句添加到文件末尾即可
        • 使文件生效:重启终端 或 source ~/.bashrc
  • 位置变量:
    • $0:执行脚本的名字
    • $1 ~ $9:传递给脚本的参数
  • 特殊变量:
    • $#:传递给脚本的参数个数
    • $*:传递给脚本的所有参数
    • $?:上次命令的执行情况,0表示正确,其他表示错误

字符串类型

  • 单引号:其中的字符都会原样输出,不会被解析

  • 双引号:可以放除了$、`、\、"以外任意字符,其中的变量等会被解析

  • 反引号:将其中的内容作为命令执行,如:

    echo `date`
    
  • ‘’:转义特定的字符,如:$、*、\、?、|、`、^、&

  • 字符串长度:${#name}

  • 字符串提取:${name:2:3},从变量name中下表为2的地方提取3个字符

数组类型

  • 定义:a=(1 2 3)
  • 成员访问:echo ${a[2]}
  • 个数统计:echo ${#a[@]}
  • 所有元素:echo ${a[*]}

seq

  • 说明:生成指定范围的连续整数
  • 示例:seq 10,生成1~10的连续整数,seq 2 10,生成2~10的连续整数

expr

  • 说明:运算一个表达式

  • 示例:

    expr 2 + 3				结果为5
    echo `expr 3 + 5` 		结果会打印8
    expr 3 \* 5				结果为15,*需要转义
    

各种运算

  • test命令:成功为真,失败为假。

    #!/bin/bash
    
    if test 1 -lt 2; then
    	echo 'ok'
    fi
    
    if [ 1 -lt 2 ]; then
    	echo 'okok'
    fi
    
  • 数值比较运算

    • -lt:小于
    • -le:小于等于
    • -gt:大于
    • -ge:大于等于
    • -eq:等于
    • -ne:不等于
  • 字符串测试

    • =:相等
    • !=:不相等
    • -z:字符串的长度是否为0
    • -n:字符串的长度是否不为0
  • 文件判断

    • -f:普通文件
    • -d:目录文件
    • -c:字符设备文件
    • -b:块设备文件
    • -w:是否可写
    • -x:是否可执行
    • -s:文件存在,并且至少有一个字符
  • 逻辑运算

    • -a:逻辑与(and),也可以使用&&来代替
    • -o:逻辑或(or),也可以使用||来代替
    • !:逻辑非
    • 示例:
    #! /bin/bash
    
    if [ 1 -lt 3 -a 2 -lt 3 ]; then
    	echo 'ok'
    fi
    
    if [ 1 -lt 3 ] && [ 2 -lt 3 ]; then
    	echo 'ok'
    fi
    
    if [ ! 1 -gt 3 ]; then
    	echo 'xxx'
    fi
    

分支结构

  • if-elif-else:

    #! /bin/bash
    
    if [ 8 -lt 3 ]; then
    	echo '8 < 3'
    elif [ 8 -lt 9 ]; then
    	echo '8 < 9'
    else
    	echo 'xxx'
    fi
    
  • case:

    #! /bin/bash
    
    read -p 'please input any charactor:' ch
    
    case $ch in
    	[a-z])
    		echo 'alpha'
    	;;
    	[0-9])
    		echo 'numberic'
    	;;
    	*)
    		echo 'others'
    	;;
    esac
    

循环结构

  • for-in 及 for

    #! /bin/bash
    
    a=(1 2 3 4 5)
    # for x in a b c
    # for x in /etc/*
    # for x in `seq 1 10`
    for x in ${a[*]}
    do
    	echo $x
    done
    
    for ((i=0;i<${#a[@]};i++))
    do
    	echo ${a[$i]}
    done
    
  • while

    #! /bin/bash
    
    i=1
    sum=0
    
    while [ $i -le 100 ]
    do
    	#((sum+=$i))
    	#((i++))
    
    	#let sum+=$i
    	#let i++
    
    	sum=$[$sum+$i]
    	i=$[$i+1]
    
    done
    
    echo $sum
    
  • until:条件成立,循环停止

    #! /bin/bash
    
    i=1
    until [ $i -gt 10 ]
    do
    	echo $i
    	((i++))
    done
    
  • break、continue自行学习

函数使用

  • demo(){
      echo 'for func'	
    }
        
    demo
    
    arg()
    {
       echo $1
       echo $2
       echo $*
       echo $#
       return 250
    }
    arg abc def
    # $?表示函数的返回值
    echo $? 
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值