shell基础2020

本文详细介绍了如何创建、编辑shell脚本,包括基本命令如echo和read,变量管理,数组操作,算术与关系运算,以及分支、循环和特殊表达式。深入探讨了环境变量、shell变量和脚本参数的使用。还涵盖了变量分类、数组操作和条件控制的实战示例。
摘要由CSDN通过智能技术生成

shell

  • shell 脚本

     创建->编辑->保存
     vi test.sh   创建一个test脚本文件
     #!/bin/bash  文本首行
     ...
     esc:x
     修改权限
     chomd u+x test.sh 给test文件脚本添加一个x执行权限
     执行
     ./test.sh
     注释
     单行#  多行注释 :<<! ...... !
    
  • 命令

    echo [-n]"..." 控制台输出   -n 不换行
    read VAR 	控制台输入
    
    echo -n "please enter your name => "
    read NAME
    echo "your name is $NAME"
    
  • 变量

     #格式:数字、字母、下划线,一般字母大写
     #创建:NAME="henry"   AGE=18
     #使用:echo $NAME,$AGE
     #取消:unset NAME
     #常量:readonly FINAL="1001"
    
  • 变量分类

      局部变量:当前实例有效
      环境变量:1、跨实例访问
      		  2、临时环境变量
      		  #添加  export VAR
      		  #删除  export -n VAR
      		  #列出所有环境变量 export -p
      shell变量:$0	当前脚本的文件名
          	    $n	脚本参数 如 ./test.sh herny 28 $1为herny $2为28
          	    $#	脚本参数的数量
      		    $*	脚本参数的完整集合
      		    $@	脚本参数的独立集合
      		    $? 上一条命令的执行结果状态值或函数的返回值:0表示正常,1表示异常
    
  • 数组

      - 数组:支持不同类型的变量,可以在同一时间容纳多个值
      - 创建赋值:方法一 NAME=(AA 17 true)  方法二 NAME[0]=  NAME[1]=
        方法三 NAME="AA,BB,CC"  NAME=($NAME) #将符合数组特性的字符串转为数组
      - 数组使用:echo $NAME	输出首元素
      		     echo ${NAME[i]} 输出下标为i的数组元素
      		     echo ${NAME[*]} 输出数组所有元素
      		     echo ${#NAME[*]}数组长度
    
    //遍历数组NAME
    for var in ${NAME[*]}
    do
      echo $var
    done
    
  • 算术运算符

      - expr与运算符和其他值之前必须有空格,所有的算术计算,使用长整数,不支持小数  *需要转义\*
      1、val=`expr 2 + 3`
      2、let "val=2**3"
      3、val=$((2**3))
         echo $val
    
  • 关系运算符

     -eq(=) -ne(!=) -lt(<) -le(<=) -gt(>) -ge(>=)
    
  • 布尔运算符

      ! -o(||) -a(&&)
     例1: [ 2 -lt 3 -o 5 -gt 3]
     例2: [[ 2 < 3 || 5 > 3 ]]
    
  • 特殊表达式

     ``	  命令代替
     例如:OUTPUT=`jps` #先执行命令,等到命令执行结束,将结果赋值给OUTPUT,才会执行之后的命令,除非启动的是后台进程
     (()) 算术运算加强版	++ -- **
     ${}=> ${str#*word}  #若str符合word,将最短word和左侧的删除
     	   ${str%word*}  #若str符合word,将最短word和右侧的删除
     	   ${str##*word} #若str符合word,将最长word和左侧的删除
     	   ${str%%word*} #若str符合word,将最长word和右侧的删除
     	   ${str/word/replace} #若str符合word,将第一个匹配项替换为replace
     	   ${str//word/replace} #若str符合word,将所有匹配项替换为replace
    
    	URL=opt/software/hadoop/a.txt
    	PS=${URL#*/}
    	echo $PS
    	执行结果:software/hadoop/a.txt
    	PS=${URL##*/}
    	执行结果:a.txt
    	PS=${URL%/*}
    	执行结果:opt/software/hadoop
    	PS=${URL%%/*}
    	执行结果:opt
    	
    
		JPS_CMD=`jps`
		JPS_NAME=${JPS_CMD//[0-9]/}
		JPS_PID=${JPS_CMD//[a-zA-Z]/}
		echo $JPS_NAME
		echo $JPS_PID
		输出结果:meNode RunJar NameNode RunJar ResourceManager
		3265 6147 18676 3590 2807 6007 3000 3753 2714 3931 3150
  • 分支

     分支一:    if [ 表达式1 ]
     			then
     				   .....
     			elif [  表达式2 ]
     			then
     				   ......
     			else
     				   ......
     			fi
     			
     分支二:    case  word in
     				word1)
     					  .....
     				;;
     				word2)
     				 	  .....
     				;;
     				*)
     				      .....
     				;;
     			esac
    
	if [ $# -eq 0 ]
	then
		echo "need one arguement"
		exit 0
	fi
	if [ $1 == "start" ]
	then
	   echo "start..."
	elif [ $1 == "stop" ]
	then
	   echo "stop..."
	else
	   echo "restart..."
	fi

	case $1 in
		1|3|5)
		   echo "xxx"
		;;
		2|4)
		   echo "xxx"
		;;
		6|7)
		   echo "xxx"
		;;
		*)
		   echo "xxx"
		;;
	esac
  • 循环

      循环一: for val in (val1,val2...valn)
     		  do
     			   echo $val
     		  done
    
      循环二: while [ 表达式 ]
     		  do
     				....
     		  done
    
      循环三: until[ 表达式 ]
     		  do
     				....
     		  done
      循环四: select val in (val1,val2...valn)
     		  do
     			   ....
     		  done
     		  
      #跳转语句
     		  break(n)	 跳出第N层循环,默认为1
     		  continue(n)	 跳出第N层循环,默认为1
    
            V="henry pola ariel"
     		V=($V)
     		for val in ${V[*]}
     		do
     		  echo $val
     		done
     		
     		IX=0
     		while [ $IX -lt ${#V[*]} ]
     		do
     		   echo ${V[$IX]}
     		   ((IX++))
     		done
    
     		IX=0
     		until [ $IX -ge ${#V[*]} ]
     		do
     		   echo ${V[$IX]}
     		  ((IX++))
     		done
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值