命令替换、算数运算 与 变量
命令替换
方法一
`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}