博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell编程—【02】命令替换、算数运算与定义变量
阅读量:6537 次
发布时间:2019-06-24

本文共 2191 字,大约阅读时间需要 7 分钟。

命令替换

方法一

`command`复制代码

方法二

$(command)复制代码

案列

获取所用用户并输出

#!/bin/bashindex = 1for 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/bashnum1=12num2=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 nginxfi# 注意不要脚本文件名不要用nginx单词复制代码

++ 和 -- 运算符

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

有类型变量

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

declare和typeset命令

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

declare 参数列表

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

常用操作

num1=10num2=$num1+10echo $num2# 10+20   (默认是字符串处理)expr $num1 + 10# 20# 声明为整形变量declare -i num3num3=$num1+90echo $num3# 100# 查看所有函数declare -f# 查看所有函数的名字declare -f# 声明数组declare -a arrayarray=("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 arrayecho ${array[@]}#array=("aa" "bbbb" "ccccc" "d")# 数组分片访问 索引从 1到3 的 3 个元素echo ${array[@]:1:4}# bbbb ccccc d# 数组遍历for v in ${array[@]}do    echo $vdone# aa# bbbb# ccccc# d# 声明为环境变量 声明为环境变量过后 该变量与终端无关,可以在任何系统脚本中读取# 在终端运行 如下:env="environment"declare -x env# 可在脚本中直接读echo ${env}复制代码

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

你可能感兴趣的文章