linux shell(一)

1、While循环

while循环构造用于多次运行某些指令。查看以下名为while.sh的脚本,以更好地理解此概念。

#!/bin/bash
i=0

while [ $i -le 2 ]
do
echo Number: $i
((i++))
done

因此,while循环采用以下形式。

while [ condition ]
do
commands 1
commands n
done

方括号周围的空格是必填的。

2、For循环

for循环是另一种广泛使用的bashshell构造,它允许用户高效地迭代代码。下面演示了一个简单的示例。

#!/bin/bash

for (( counter=1; counter<=10; counter++ ))
do
echo -n "$counter "
done

printf "\n"

3.接收用户输入

#!/bin/bash

echo -n "Enter Something:"
read something

echo "You Entered: $something"

4、If语句

if CONDITION 
then
STATEMENTS
fi

只有当条件为真时,才会执行这些语句。fi关键字用于标记if语句的结尾。下面显示了一个快速示例。

#!/bin/bash
echo -n "Enter a number: "
read num
if [[ $num -gt 10 ]]
then
echo "Number is greater than 10."
fi

如果通过输入提供的数字大于10,上述程序将仅显示输出。-gt表示大于;类似地-lt表示小于-le表示小于等于;且-ge表示大于等于。此外,还需要[[]]。

5、使用echo打印

echo命令用于在bash中打印信息。它类似于C函数“printf”,并提供了许多常见选项,包括转义序列和重定向。将以下行复制到名为echo.sh的文件中,并使其可执行,如上所述。

#!/bin/bash
echo "Printing text"
echo -n "Printing text without newline"
echo -e "\nRemoving \t special \t characters\n"

运行脚本以查看其功能。-e选项用于告诉echo传递给它的字符串包含特殊字符,需要扩展功能。

echo(选项)(参数)选项

-e:激活转义字符。使用-e选项时,若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

•\a 发出警告声;
•\b 删除前一个字符;
•\c 最后不加上换行符号;
•\f 换行但光标仍旧停留在原来的位置;
•\n 换行且光标移至行首;
•\r 光标移至行首,但不换行;
•\t 插入tab;
•\v 与\f相同;
•\\ 插入\字符;
•\nnn 插入nnn(八进制)所代表的ASCII字符;
参数

变量:指定要打印的变量。

实例

用echo命令打印带有色彩的文字:

文字色:

echo -e "\e[1;31mThis is red text\e[0m"
This is red text•\e[1;31m 将颜色设置为红色
•\e[0m 将颜色重新置回
颜色码:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34,洋红=35,青色=36,白色=37

背景色:

echo -e "\e[1;42mGreed Background\e[0m"
Greed Background颜色码:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝色=44,洋红=45,青色=46,白色=47

文字闪动:

echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"
红色数字处还有其他数字参数:0 关闭所有属性、1 设置高亮度(加粗)、4 下划线、5 闪烁、7 反显、8 消隐

echo -n 不换行输出
$echo -n "123"
$echo "456"

最终输出 
123456

6、使用If Else进行更多控制

将else构造与if结合起来,可以更好地控制脚本的逻辑。下面显示了一个简单的示例。

#!/bin/bash

read n
if [ $n -lt 10 ];
then
echo "It is a one digit number"
else
echo "It is a two digit number"
fi

其他部分需要放在if的动作部分之后和fi之前。

7、应用案例

需求:判断当前主机是否和远程主机是否ping通

#!/bin/bash
# 该脚本用于判断当前主机是否和远程指定主机互通

read -p "请输入你要ping的主机的IP:" ip

# 使用ping程序判断主机是否互通
ping -c1 $ip &>/dev/null

if [ $? -eq 0 ];then
    echo "当前主机和远程主机$ip是互通的"
 else
     echo "当前主机和远程主机$ip不通的"
fi

逻辑运算符
test $? -eq 0 &&  echo "当前主机和远程主机$ip是互通的" || echo "当前主机和远程主机$ip不通的"
 

8、应用案例

需求:判断你输入的字符是数字、字母还是其他字符。


[root@server2 ~]# vi case.sh
[root@server2 ~]# chmod +x case.sh
[root@server2 ~]# ./case.sh

#!/bin/bash
# 判断输入的字符是哪种类型
read -p "请输入一个字符并按enter回车确认" key
case "$key" in
    [a-z]|[A-Z])                   匹配任意字母
         echo "您输入的是字母."    
      ;;
    [0-9])                            匹配任意数字
         echo "您输入的是数字."
      ;;     
     *)                                  匹配任意字符 
         echo "您输入的是空格,功能键,其它控制字符." 
exit 1
esac

你可能感兴趣的:(linux,运维,服务器)