当前位置: 首页 > news >正文

Shell编程—【02】命令替换、算数运算与定义变量

命令替换

方法一

 `command`
复制代码

方法二

$(command)
复制代码

案列

获取所用用户并输出

#!/bin/bash

index = 1
for user in `cat /etc/passwd | cut -d ":" -f 1`
# for user in $(cat /etc/passwd | cut -d ":" -f 1)
do
        echo "this is $index user : $user"
        index=$(($index + 1))
done
复制代码

根据系统时间计算明年

#!/bin/bash
# 一个小括号是命令替换
echo "This Year is $(date +%Y)"
# 两个括号是算数运算
echo "Next Year is $(($(date +%Y) + 1))"
复制代码

算数运算

  • 使用$(( 算数表达式 ))
  • 其中如果用到变量可以加$ 也可以省略
  • 如:
#!/bin/bash
num1=12
num2=232
# 两种方式都可以读到变量
echo $(($num1 + $num2))
echo $((num1 + num2))
echo $(((num1 + num2) * 2))

复制代码

案列

根据系统时间获取今年还剩多少个星期,已经过了多少个星期

#!/bin/bash
# +%j 是获取本年过了多少天
days=`date +%j`
echo "This year have passed $days days."
echo "This year have passed $(($days / 7)) weeks."
echo "There $((365 - $days)) days before new year."
echo "There $(((365 - $days) / 7)) weeks before new year."
复制代码

判断nginx是否运行,如果不在运行则启动

#!/bin/bash

#   nginx进程个数                        去除grep的进程   统计结果数
nginx_process_num=`ps -ef | grep nginx | grep -v grep | wc -l`

echo "nginx process num : $nginx_process_num"

if [ "$nginx_process_num" -eq 0 ]; then
    echo "start nginx."
    systemctl start nginx
fi
# 注意不要脚本文件名不要用nginx单词
复制代码

++ 和 -- 运算符

num=0
echo $((num++))
# 0
echo $((num))
# 1

# 这个和其他编程语言是一样的 不过此时 num不能加$符号
复制代码

有类型变量

  • shell是弱类型变量
  • 但是shell可以对变量进行类型声明

declare和typeset命令

  • declare命令和typeset命令两者等价
  • declare、typeset命令都是用来定义变量类型的

declare 参数列表

  • -r 只读
  • -i 整型
  • -a 数组
  • -f 显示此脚本前定义过的所有函数及内容
  • -F 仅显示此脚本前定义过的函数名
  • -x 将变量声明为环境变量

常用操作

num1=10
num2=$num1+10
echo $num2
# 10+20   (默认是字符串处理)

expr $num1 + 10
# 20

# 声明为整形变量
declare -i num3
num3=$num1+90
echo $num3
# 100

# 查看所有函数
declare -f

# 查看所有函数的名字
declare -f

# 声明数组
declare -a array
array=("aa" "bbbb" "ccccc" "d")

# 输出数组内容
# 输出全部内容
echo ${array[@]}
# aa bbbb ccccc d

# 根据索引输出
echo ${array[2]}
# ccccc

# 获取数组长度
# 数组元素的个数
echo ${#array[@]}
# 4

# 数组指定下标元素的长度
echo ${#array[3]}
# 1

# 给某个索引位置赋值
array[0]="aaa"

# 删除元素
# 清除元素
unset array[2]
echo ${array[@]}
# aaa bbbb d
# 清空整个数组
unset array
echo ${array[@]}
#

array=("aa" "bbbb" "ccccc" "d")

# 数组分片访问 索引从 1到3 的 3 个元素
echo ${array[@]:1:4}
# bbbb ccccc d

# 数组遍历
for v in ${array[@]}
do
    echo $v
done
# aa
# bbbb
# ccccc
# d

# 声明为环境变量 声明为环境变量过后 该变量与终端无关,可以在任何系统脚本中读取
# 在终端运行 如下:
env="environment"
declare -x env

# 可在脚本中直接读
echo ${env}

复制代码

转载于:https://juejin.im/post/5d05099f6fb9a07eec59c85a

相关文章:

  • WIN7系统下怎样批量添加文件扩展名
  • [Android]Android开发入门之HelloWorld
  • 意法半导体 STM32F102C4 芯片解密 芯片特性
  • Keepalived原理及配置应用总结
  • 关于爱情
  • 网页图表Highcharts实践教程之外层图表区
  • Java基础学习总结(13)——流IO
  • T的用法
  • 百度地图API的学习
  • Maven学习总结(三)——使用Maven构建项目
  • Hadoop学习总结(1)——大数据以及Hadoop相关概念介绍
  • 在Docker中从头部署自己的Spark集群
  • Easy UI form表单提交 IE浏览器不执行success ,以及 datagrid 展示过慢
  • BZOJ 1708: [Usaco2007 Oct]Money奶牛的硬币( dp )
  • 20951文件管理
  • [PHP内核探索]PHP中的哈希表
  • JS 中的深拷贝与浅拷贝
  • @jsonView过滤属性
  • Angular数据绑定机制
  • CAP理论的例子讲解
  • CSS相对定位
  • mysql常用命令汇总
  • PAT A1092
  • php中curl和soap方式请求服务超时问题
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • rabbitmq延迟消息示例
  • ReactNativeweexDeviceOne对比
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue总结
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 和 || 运算
  • 基于 Babel 的 npm 包最小化设置
  • 京东美团研发面经
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 通过npm或yarn自动生成vue组件
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 新版博客前端前瞻
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  •  一套莫尔斯电报听写、翻译系统
  • 用Canvas画一棵二叉树
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 移动端高清、多屏适配方案
  • ​2020 年大前端技术趋势解读
  • ​VRRP 虚拟路由冗余协议(华为)
  • #pragma once与条件编译
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (待修改)PyG安装步骤
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • .libPaths()设置包加载目录
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET 设计模式—简单工厂(Simple Factory Pattern)