shell教程

=============================shell脚本=================================
脚本实例:
 #!/bin/bash    声明解释器
 for i in $(ls /etc);do
  echo $i
 done
 
 
readonly 变量名 -----  使变量变为只读,不可删除
unset 变量名 ------- 删除变量,但是不能删除只读变量

字符串中---单引号:无变量,没有转移符
  ---双引号:可有变量,可出现转义符
  
shell 中的字符串拼接,不用加+,python需要

echo ${#变量}   获取字符串长度
echo ${变量:1:3}  切片,左右都包括

shell中定义数组:  li=(1 2 3)
   或者  li[0]=1
      li[1]=2
      li[2]=3
     
  读取  ${li[n]}  利用索引取值
     ${li[@]}   取出所有
    
 获取数组长度
  len=${#li[@]}
  len=${#li[*]}
  len=${#li[n]}  取数组内单个元素的长度
  

传参:
 echo "shell 传递参数实例!";
 echo "shell 执行的文件名:$0";            $0代表文件名
 echo "shell 第一个参数为:$1";
 echo "shell 第二个参数为:$2";
 chmod +x test.sh   给文件加可执行权限
 ./test.sh 1 2  执行此文件               test.sh传给$0   1 2 依次传给$1和$2
 
 其他补充:
  $#  传递到脚本的参数个数
  $*  以单个字符串的形式显示参数,把所有参数作为一个整体形成一个大字符串
  $@  与$*差不多,不过是分开的形式


算数运算符:
    #!/bin/bash
 var=`expr 2 + 2               2 + 2 中间必须有空格,不然无效
 echo "两数之和为:$var"

 注意:  乘法的时候  必须转义   \*
关系运算符:  只支持数字,不支持字符串,除非字符串是数字
 -eq 是否等于
 -ne 是否不相等
 -gt  大于
 -lt  小于
 -ge  大于等于
 -le  小于等于
布尔运算符:
 !    非
 -o   或
 -a   与
 
逻辑运算符:
 &&   AND
 ||    OR
 
字符串运算符:
 =   检测两个字符串是否相等,相等返回True
 !=  检测连个字符串是否不想打,不相等返回True
 -z  检测字符串长度是否为0,为0返回True
 -n  检测字符串长度是否为0,不为0返回True
 str  检测字符串长度是否为空,不为空返回True
 
文件测试运算符:
 ...

echo命令:
 aa.sh文件
 #!/bin/bash
 read name
 echo "$name haha"
 
 执行./aa.sh文件
 输入OK
 显示 OK haha

echo -e  开启转义
    \n 换行   \c不换行
echo '$name\'  单引号原样输出
echo `date`  输入执行结果   是反引号

printt  例如:printf "Hello, Shell\n"   手动添加\n换行

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg    
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
%s %c %d %f都是格式替代符
%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
%-4.2f 指格式化为小数,其中.2指保留2位小数。

# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
 例:printf "%s and %d \n"  --->>>    and 0

test测试
 数值测试
 -eq  等于则为真
 -ne  不等于则为真
 -gt  大于则为真
 -ge   大于等于则为真
 -lt   小于则为真
 -le   小于等于则为真
 例:
  num1=100
  num2=100
  if test $[num1] -eq $[num2]
  then
   echo '两个数相等!'
  else
   echo '两个数不相等!'
  fi
 字符串测试
 =   等于则为真
 !=   不相等则为真
 -z  字符串的长度为零则为真
 -n   字符串的长度不为零则为真

 文件测试
 -e  如果文件存在则为真
 -r  如果文件存在且可读则为真
 -w  如果文件存在且可写则为真
 -x  如果文件存在且可执行则为真
 -s  如果文件存在且至少有一个字符则为真
 -d  如果文件存在且为目录则为真
 -f  如果文件存在且为普通文件则为真
 -c  如果文件存在且为字符型特殊文件则为真
 -b  如果文件存在且为块特殊文件则为真
  例:
   if test -e ./bash
   then
    echo '文件已存在!'
   else
    echo '文件不存在!'
   fi
 Shell还提供了与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!"最高,"-a"次之,"-o"最低。
 
流程控制
if  elif  else
 if condition1
 then
  command1
 elif condition2
 then
  command2
 else
  commandN
 fi
for循环
  for var in item1 item2 ... itemN
 do
  command1
  command2
  ...
  commandN
 done
while循环
 #!/bin/bash
 int=1
 while(( $int<=5 ))
 do
  echo $int
  let "int++"
 done
 
 FILM监控键盘输入信息
 echo '按下 <CTRL-D> 退出'
 echo -n '输入你最喜欢的网站名: '
 while read FILM
 do
  echo "是的!$FILM 是一个好网站"
 done
 
 until 循环
 until 循环执行一系列命令直至条件为 true 时停止。
 until 循环与 while 循环在处理方式上刚好相反。
 一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。
 until 语法格式:
 until condition
 do
  command
 done
 
 case 匹配模式
 echo '输入 1 到 4 之间的数字:'
 echo '你输入的数字为:'
 read aNum
 case $aNum in
  1)  echo '你选择了 1'
  ;;
  2)  echo '你选择了 2'
  ;;
  3)  echo '你选择了 3'
  ;;
  4)  echo '你选择了 4'
  ;;
  *)  echo '你没有输入 1 到 4 之间的数字'
  ;;
 esac
 
break continu  与python一样 

函数调用:
 funWithReturn(){
  echo "这个函数会对输入的两个数字进行相加运算..."
  echo "输入第一个数字: "
  read aNum
  echo "输入第二个数字: "
  read anotherNum
  echo "两个数字分别为 $aNum 和 $anotherNum !"
  return $(($aNum+$anotherNum))
 }
 funWithReturn
 echo "输入的两个数字之和为 $? !"
 
 输出类似下面:
 这个函数会对输入的两个数字进行相加运算...
 输入第一个数字:
 1
 输入第二个数字:
 2
 两个数字分别为 1 和 2 !
 输入的两个数字之和为 3 !  ---->>>>  注意:函数返回值在调用该函数后通过 $? 来获得。
 
注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。  
 
输出重定向:>   >>追加输出 
 
输入重定向:<   从文件中获取
 
shell中的文件引用     . ./文件名     或     source ./文件名

posted @ 2018-10-17 22:13  匠心程序定制  阅读(227)  评论(0编辑  收藏  举报