shell语法及认知

shell简介

- 什么是shell?
  - 是一种服务器端的脚本语言,shell编程就是将shell命令保存到文件(shell脚本)中。
- shell类型?
  - ash、csh、ksh、bash等
  - 查看当前使用的shell:echo $SHELL
  - 查看系统可以的shell:cat /etc/shells
- shell脚本
  - 指定shell解析器执行指定的shell脚本:
    - 创建1.sh文件,添加内容echo 'Hello world!'
    - 执行:bash 1.sh,1.sh文件不需要可执行权限
  - 自解析shell脚本:
    - 创建1.sh文件,在开头添加内容#!/bin/bash,指定shell解析器
    - 添加可执行权限:chmod +x 1.sh
    - 执行:./1.sh
- 说明:
  - shell脚本中的#表示注释,开头的#!表示指定解析环境
  - 单独的自解析的脚本需要添加可执行权限

变量定义

- 变量定义:name='xxx',=两边不能有空格
- 打印变量:echo $name 或 echo ${name}
- 销毁变量:unset name,销毁后就不能再使用了
- 定义常量:readonly name='xxx',修改常量会保存

变量分类

- 本地变量:只适合于当前脚本的变量
- 环境变量:通常整个系统环境都能使用,一般都是纯大写的
  - 查看系统环境变量:env
  - 查看指定环境变量:echo $PATH
  - 若想让一个应用程序任意位置都可使用,将该程序所在目录添加到PATH环境变量:
    - 临时:export PATH=$PATH:新目录
    - 永久:
      - 系统:/etc/profile
      - 用户:~/.profile、~/.bashrc、~/.bash_profile
      - 将临时的export语句放在脚本末尾即可
      - 让配置文件立即生效:source ~/.profile
- 位置变量:
  - $0:表示脚本名字
  - $1~$9:表示传递给脚本的参数
- 特殊变量:
  - $#:传递给脚本的参数个数
  - $*:传递给脚本的所有参数
  - $?:上次命令执行的结果,0表示正确,其他值表示对于的错误

数值类型

- 定义变量或赋值,默认所有的值都是普通的字符,即使时数字
- 若想让变量作为数值进行运算,前面需要加上let
- 示例:
      #! /bin/bash
      
      a=1
      let a=a+2
      echo $a

字符串类型

- 单引号:单引号中的字符都会保持原样,变量不会被解析
- 双引号:双引号中的变量会解析,特殊字符:$、"、\、`
- 反引号:其中的内容会作为命令执行,如
      echo `date`
- 长度计算:echo ${#name}
- 子串提取:echo ${name:2:3},从下标为2开始提取3个字符

数组类型

- 定义:a=(1 2 3)
- 成员访问:echo ${a[1]}
- 所有成员:echo ${a[*]}
- 长度计算:echo ${#a[@]}

各种运算

- test:测试真假
      #!/bin/bash
      
      if test 1 -lt 2;then
      	echo 'ok'
      fi
      
      if [ 1 -lt 2 ];then
      	echo 'ok'
      fi
- 数值大小比较
    符号  	说明  
    -lt 	小于  
    -le 	小于等于
    -gt 	大于  
    -ge 	大于等于
    -eq 	等于  
    -ne 	不等于 
- 字符串比较
    符号  	说明        
    =   	相等        
    !=  	不等        
    -z  	字符串长度是否为0 
    -n  	字符串长度是否不为0
- 文件判断
    符号  	说明              
    -f  	普通文件            
    -d  	目录文件            
    -c  	字符设备            
    -b  	块设备             
    -r  	是否可读            
    -w  	是否可写            
    -x  	是否可执行           
    -s  	文件是否存在,并且至少有一个字符
- 逻辑运算
  - -a:逻辑与(and),也可以使用&&来代替
  - -o:逻辑或(or),也可以使用||来代替
  - !:逻辑非(not)
      #!/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 'ok'
      fi

分之结构

- if-elif-else-fi
      #! /bin/bash
      
      if [ 4 -lt 3 ];then
      	echo '111'
      elif [ 2 -gt 3 ];then
      	echo '222'
      else
      	echo '333'
      fi
- case
      #!/bin/bash
      
      # 获取用户输入,-p指定打印信息,输入内容保存到ch中
      read -p 'please input a 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)
      
      #for x in ${a[*]}
      #for x in 1 2 3
      #for x in /etc/*
      #for x in {1..10}
      for x in `seq 1 10`
      do
      	echo $x
      done

  for ((i=0;i<${#a[@]};i++))

  do

  	echo ${a[$i]}

  done

  for i in {1..100}

  do

  	let j+=$i

  done

  echo $j

    - `while`:条件成立执行循环
    
      ```shell
      #! /bin/bash
    
      i=1
    
      while [ $i -le 10 ]
      do
      	echo $i
      	#((i++))
      	let i++
      done

- until:条件成立结束循环
      #! /bin/bash
      
      i=1
      
      until [ $i -gt 10 ]
      do
      	echo $i
      	((i++))
      done
- break、continue自行学习

函数使用

- 示例:
      #! /bin/bash

  demo()

  {

  	echo 'in demo func'

  }

  demo

  args()

  {

第一个参数

  	echo $1

第二个参数

  	echo $2

参数个数

  	echo $#

所有参数

  	echo $*

  }

  args 11 22 33

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值