天天看点

shell学习笔记

一:变量

命名规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

变量使用:

     $your_name

     ${your_name}

     "My name is ${your_name}"

推荐给所有变量加上花括号,这是一个人好的编程习惯。

只读变量:

     myurl="my name is kenny"

     readonly  myurl

    再去给变量赋值是不可实现的

删除变量:

    uset myurl   #此时变量已经被删除

shell变量:

    环境变量,局部变量,shell变量    

Shell字符串:

  1:单引号和双引号区别

             单引号中不能出现单引号,用转义字符转义也不行,双引号可以

             单引号中不能出现变量,双引号可以

       2:拼接字符串

             $aa$bb

       3.获取字符串长度

             str=“asfgsdfg”

      echo ${#str}   会输出字符串长度

       4.提取字符串

             echo ${str:1:6}   #会输出di第2到7位

       5.查找字符串位置

              echo `expr index "$str" f`   #输出字符串f在字符串中的位置

 二:参数传递

  1.$n        传递参数

  2.$#        传递参数个数

  3.$*        以一个单字符串显示所有向脚本传递的参数

  4.$@     $*相同,但是使用时加引号,并在引号中返回每个参数。

  5.$$      脚本运行的当前进程ID号

       6.$!       后台运行的最后一个进程的ID号

       7.$?     表示上一条命令的返回值

  8.$0     Shell本身的文件名

  9.$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…

三:数组

  规则:

             1:shell只支持一维数组,不支持多维

             2:shell数组用括号括起来表示,元素之间用空格隔开

             my_array=(A B C D)

输出:
     echo  “${my_array[0]}”
     获取所有数组元素:
      
echo "数组的元素为: ${my_array[*]}"
     echo "数组的元素为: ${my_array[@]}"      
获取数组长度:
      
echo "数组的元素为: ${#my_array[*]}"
     echo "数组的元素为: ${#my_array[@]}"      
注意事项:
     1:数组元素可以为变量
      
my_array=($A B C D)      

四:运算符

      shell中运算符分为6种:

  1:算术运算符

  2:关系运算符

  3:布尔运算符

  4:字符串运算符

  5:文件测试运算符

  详解:

            val='exper   2 + 2'     #输出为4

           注意2 + 2之间运算符和数字之间一定要有空格,否则会按字符串输出

     

shell学习笔记

      

shell学习笔记
shell学习笔记

  4:逻辑运算符

    

shell学习笔记

  5:字符串运算符

shell学习笔记

  6:文件测试运算符

shell学习笔记

二:echo

  1:显示转义字符

            echo "\" myname    \""

  2:显示变量

    echo "$name It is a test"

  3:换行

          cheo "hello word  \n"

  4:不换行

  echo -e "OK! \c" # -e 开启转义 \c 不换行
  echo "It is a test"      

  5:显示结果重定向

     echo "It is a test" > myfile

三:流程控制

     if...else

if [ $exitstatus = 0 ]; then
   if [ ! $PET ]; then
  	echo "you have not input a word!"
    else
        echo $PTION 
        if [ $PTION = 1 ]; then
           echo "Your ip is:" $PET
           echo -e "\n#" $PET  "\n0.0.0.0 10${PET} 172.17.17.${PET} 3389">>/root/aa.sh
        else  
      	   echo "Your ip is:" $PET
      	   echo -e "\n#" $PET  "\n0.0.0.0 10${PET} 172.17.17.${PET} 22">>/root/aa.sh
      	   echo -e             "0.0.0.0 20${PET} 172.17.17.${PET} 80">>/root/aa.sh
      	   echo -e             "0.0.0.0 30${PET} 172.17.17.${PET} 9091">>/root/aa.sh
        fi  
   fi
else
    echo "You chose Cancel."
fi
      

  for

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done
      

  while

int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done
      

  

     until

     case

case "$1" in
   -c)
        BackupControllerConfig
    ;;
   -p)
        BackupComputeConfig
    ;;
   -rc)
        RestoreControllerConfig
    ;;
   -rp)
        RestoreComputeConfig
    ;;
   -ri)
        RintedConfig
    ;;
   *)  
        Openstack_help
    exit 0
esac
      

     break

     break命令允许跳出所有循环(终止执行后面的所有循环)。

     continue

     continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

其他:

   shell脚本中获取当前路径

$(cd `dirname $0`; pwd)
      

 -E表示一旦出错,就退出当前的shell。

bash -E /root/1.sh
      

 $? 上个命令的退出状态,或函数的返回值。

-ne 是不等于      
check_exit(){
    if [ $? -ne 0 ]; then
        echo -e "\033[41;37m[Error]: have a error \033[0m"
        exit 1
    fi
}      

 解压安装包到/opt/目录下

tar -zxf ./packages/s3_bs_install.2* -C /opt/
      

  当前bash环境下读取并执行FileName中的命令

source ./config/deploy-config
      

  允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

       对获取的字符串进行排序排重

$(echo ${all_ips_old} | awk '{for(i =1; i <=NF; i++){ if($i~/[0-9]\.[0-9]/) print $i  }}'|sort -u)
      

  1:export  使变量为全局变量

        2:使用加-o StrictHostKeyChecking=no参数,SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查

export autossh="ssh -i ${ssh_private_key} -o StrictHostKeyChecking=no"
#-q: 不显示传输进度条
export autoscp="scp -i ${ssh_private_key} -o StrictHostKeyChecking=no -q"