shell 脚本自用

变量

把命令作为变量

count=$(cat a.txt | grep -v COUNT)
count=`cat a.txt | grep -v COUNT` #反单引号,引用命令执行结果
echo $count   #使用变量

也可以把命令获取到的值放到文本里,对文本进行处理

mysql -uzabbix -pzabbix -e "SELECT name,status,available,maintenanceid FROM zabbix.hosts WHERE 'status'=0 AND  (available=2) AND MAINTENANCEID IS NULL;"  >> a.txt
echo "" >a.txt  #再清空a.txt数据,下次使用

日志类的以时间进行命名

TIME=`date +%Y%m%d%H%M%S`
LOG=/home/root/log/sql_$TIME.log

执行脚本时传参至脚本

在执行脚本时传入参数

vim c.sh
#!/bin/bash
echo "第一个参数为:$1";
echo "第二个参数为:$2";
chmod +x c.sh
./c.sh 1 2 

在这里插入图片描述

在执行脚本后传入参数

#!/bin/sh
echo -n "输入一个值:"
read a
echo  "你输入的值是$a"

在这里插入图片描述

读取文件read

每次调用read命令都会读取文件中的"一行"文本。当文件没有可读的行时,read命令将以非零状态退出。
读取文件的关键是如何将文本中的数据传送给read命令。最常用的方法是对文件使用cat命令并通过管道将结果直接传送给包含read命令的while命令

  • read 选项 变量
    -p 提示信息
    -t 等待多久
    -s 隐藏输入数据,机密的输入
#!/bin/bash

#这里默认会换行
echo  "输入: "
#读取从键盘的输入
read a
echo "你输入的是 $a"
exit 0  #退出

在这里插入图片描述

#!/bin/bash

count=1    # 赋值语句,不加空格
cat /mnt/a | while read line      # cat 命令的输出作为read命令的输入,read读到>的值放在line中
do
   echo "Line $count:$line"
   count=$[ $count + 1 ]          # 注意中括号中的空格。
done
echo "finish"
exit 0

在这里插入图片描述

#!/bin/bash

read  -s  -p "请输入您的密码:" pass    #输入密码与背景色一致,做到隐藏密码
echo "\n您输入的密码是 $pass"
exit 0

shell脚本输出带颜色

echo -e "\033[字背景颜色;文字颜色m字符串     \033[0m" 
echo -e "\033[32;5m 字符串 \033[0m"
#   -e:echo的拓展属性
#   \033[32m  开始,32为绿色字体,5为闪烁,m是颜色和闪烁的结尾,颜色和闪烁或其他参数要使用分号分隔;
#   字符串为输入内容 
#   \033[0m   结尾

在这里插入图片描述

数组

数组用括号来表示,元素用"空格"符号分割开,语法格式如下:array_name=(value1 value2 … valuen)

#!/bin/bash
my_array=( a b 3 5)

echo "第一个元素为: ${my_array[0]}"   #0为数组的索引,数组都是从0开始的
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"
echo "第四个元素为: ${my_array[*]}"   #输出数组中的所有元素

在这里插入图片描述

运算符

原生bash不支持简单的数学运算,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2
完整的表达式要被 反单引号包含``,注意这个字符不是常用的单引号

#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"

在这里插入图片描述

算术运算符

条件表达式要放在方括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]。

*    #乘法,变量相乘要加转义符"\" 例:a=10 b=20 `expr $a \* $b` 结果为200。
/    #除法 例:a=10 b=20  `expr $b % $a` 结果为 2。
%    #取余 例:a=10 b=20  `expr $b % $a` 结果为 0。
==   #相等 例:a=10 b=20  [ $a == $b ] 返回 false。

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

-eq	  #等于 例:a=10 b=20  [ $a -eq $b ] 返回 false。
-ne	  #不等于 例:a=10 b=20  [ $a -ne $b ] 返回 true。
-gt   #大于
-lt   #小于
-ge   #大于等于
-le   #小于等于

逻辑运算符

&&    # 逻辑的 AND 例a=10 b=20 [[ $a -lt 100 && $b -gt 100 ]] 返回 false
||    # 逻辑的 OR 例a=10 b=20 [[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符

=   #检测两个字符串是否相等,相等返回true。a=sdf b=asdf,[ $a = $b ] 返回 false。
-z  #检测字符串长度是否为0,为0返回 true。a=sdf  [-z $a]  返回false

echo

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

在这里插入图片描述

echo -e "OK! \c" # -e 开启转义 \c 不换行
echo "It is a test"
echo '$name\"'   #单引号,强引用,返回值是$name\"
echo `date`      #反单引号,显示命令执行结果

流程控制

if else 判断

if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi  #写成一行在命令行执行
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

在这里插入图片描述

for - in循环

通常情况下 shell 变量调用需要加 $,但是 for 的 (()) 中不需要
in 后面接的是数组,是有顺序的

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

在这里插入图片描述

#!/bin/bash
for((i=1;i<=5;i++));do
    echo "这是第 $i 次调用";
done;

在这里插入图片描述

while 语句

while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

在这里插入图片描述

跳出循环break命令,脚本直接结束

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break
        ;;
    esac
done

在这里插入图片描述

跳出循环 continue,只跳出当前循环语句,不结束脚本,且会继续执行循环

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done

在这里插入图片描述

until

until 循环执行一系列命令直至条件为 true 时停止

#!/bin/bash

a=0

until [ ! $a -lt 5 ]
do
   echo $a
   a=`expr $a + 1`
done

case … esac

case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

#!/bin/sh

echo -n "输入 1 到 3 之间的数字:"
read a
case "$a" in
   1) echo "site=1"
   ;;
   2) echo "site=2"
   ;;
   3) echo "site=3"
   ;;
   *) echo "error"
   ;;
esac

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值