前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shell学习笔记

shell学习笔记

作者头像
yaohong
发布2019-09-11 16:03:05
7070
发布2019-09-11 16:03:05
举报
文章被收录于专栏:姚红专栏

一:变量

命名规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用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)

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

四:运算符

shell中运算符分为6种:

  1:算术运算符

  2:关系运算符

  3:布尔运算符

  4:字符串运算符

  5:文件测试运算符

  详解:

  1:算术运算符

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

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

  2:关系运算符

  3:布尔运算符

  4:逻辑运算符

  5:字符串运算符

  6:文件测试运算符

二:echo

  1:显示转义字符

echo "\" myname \""

  2:显示变量

echo "$name It is a test"

  3:换行

cheo "hello word \n"

  4:不换行

代码语言:javascript
复制
  echo -e "OK! \c" # -e 开启转义 \c 不换行
  echo "It is a test"

  5:显示结果重定向

echo "It is a test" > myfile

三:流程控制

if...else

代码语言:javascript
复制
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

代码语言:javascript
复制
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

  while

代码语言:javascript
复制
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

until

case

代码语言:javascript
复制
case "$1" in
   -c)
        BackupControllerConfig
    ;;
   -p)
        BackupComputeConfig
    ;;
   -rc)
        RestoreControllerConfig
    ;;
   -rp)
        RestoreComputeConfig
    ;;
   -ri)
        RintedConfig
    ;;
   *)  
        Openstack_help
    exit 0
esac

break

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

continue

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

其他:

shell脚本中获取当前路径

代码语言:javascript
复制
$(cd `dirname $0`; pwd)

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

代码语言:javascript
复制
bash -E /root/1.sh

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

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

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

代码语言:javascript
复制
tar -zxf ./packages/s3_bs_install.2* -C /opt/

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

代码语言:javascript
复制
source ./config/deploy-config

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

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

代码语言:javascript
复制
$(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 的公钥检查

代码语言:javascript
复制
export autossh="ssh -i ${ssh_private_key} -o StrictHostKeyChecking=no"
#-q: 不显示传输进度条
export autoscp="scp -i ${ssh_private_key} -o StrictHostKeyChecking=no -q"
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-09-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:变量
    • 命名规则:
      • 变量使用:
        • 只读变量:
          • 删除变量:
            • shell变量:
              • Shell字符串:
              • 二:echo
              • 三:流程控制
              相关产品与服务
              腾讯云 BI
              腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档