@TOC
10_Linux 根底 -SHELL 入门 1
一. 输入输出重定向
回顾 1 输入输出重定向
输出
read -p“请输出”a -p 提醒 a 赋值给 a
read -s 明码暗藏
—————————————————————
输入
echo
\# echo -e“abc\t abc”转义字符输入
abc abc
\# echo“abc\t abc”abc\t abc
echo -n 不接换行
echo -e 转义字符输入
二. 2 个非凡文件
知识点 2 2 个非凡文件
两个非凡文件
·/dev/null
:过滤规范错误信息
·/dev/zero
:用来创立指定长度文件
/dev/null
:黑洞文件,不保留,不输入的信息,就丢到黑洞文件
/dev/zero
:用来生成指定大小的文件,生成一堆 0
示例:/dev/zero
:用来生成指定大小的文件,生成一堆 0
/dev/zero
个别用作生成指定大小的文件,做测试用
dd 是一个备份命令,也能够产生一个指定大小的文件
if 输出文件 input file
of 输入文件 output file
bs 输入的数据的单位大小
count 输入的数据单位数量
示例:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\__\_
[root@sanchuang-linux dev]# dd if=/dev/zero of=/tmp/test.dd bs=1M count=5
记录了 5 +0 的读入
记录了 5 +0 的写出
5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.00196718 s, 2.7 GB/s
[root@sanchuang-linux dev]# du -sh /tmp/test.dd
5.0M /tmp/test.dd
if 从哪里导进来,of 导出去这个文件,bs 数据单位大小,count 数据单位数量
三. here document
知识点 3 here document
here document 文档就在这里
<<
生成一个指定内容的文档。
简略脚本中应用
示例:
———————————————————–
[root@sanchuang-linux chenpeng]# cat >here_test.txt <<EOF
\> nihao
\> sanchuang
\> huanying
\> world…………
\> x y z\> EOF
[root@sanchuang-linux chenpeng]# cat here_test.txt
nihao
sanchuang
huanying
world…………
x y z
知识点 3.2 EOF 是文档完结标记 能够自行定义(end of file)
示例:
——————————————————
[root@sanchuang-linux chenpeng]# cat >here_test <<XYZ
\> nihao
\> hello world> XYZ
[root@sanchuang-linux chenpeng]# cat here_test
nihao
hello world
四. tee 命令
知识点 4 tee 命令
tee 命令 输入到屏幕也重定向到文件
示例:
———————————-
[root@sanchuang-linux chenpeng]# echo “aa” >test_aa.txt #(注:默认不输入到屏幕)
[root@sanchuang-linux chenpeng]# cat test_aa.txt
aa
[root@sanchuang-linux chenpeng]# echo "bb" |tee test_bb.txt #
(注:屏幕 + 文件)
bb
[root@sanchuang-linux chenpeng]# cat test_bb.txt
bb
五. 清空文件内容
知识点 5 清空文件内容
[root@sanchuang-linux chenpeng]# >test_bb.txt
[root@sanchuang-linux chenpeng]# echo > test_bb.txt
#(注:有换行)
[root@sanchuang-linux chenpeng]# cat test_bb.txt
[root@sanchuang-linux chenpeng]# echo -n > test_bb.txt
[root@sanchuang-linux chenpeng]# cat test_bb.txt
[root@sanchuang-linux chenpeng]# :>test_bb.txt
[root@sanchuang-linux chenpeng]# cat test_bb.txt
知识点 6 echo
echo
在屏幕上显示一段文字或指定内容
输入变量,输入指定内容
-e 选项 转义字符输入
-n 选项 不接换行
六. SHELL 入门
shell 入门
shell 是一个用 C 语言写的程序,它是用户应用 linux 的桥梁
shell 脚本 实现自动化 重复性的操作编写脚本实现,缩小人工失误
SHELL 的变量
shell 的变量
1、局部变量 定义在脚本或命令中
2、环境变量 shell 启动的程序能拜访到的环境变量 env、echo $PATH
3、shell 变量
示例:环境变量
------------------------------------------
[root@sanchuang-linux chenpeng]# which ls
alias ls='ls --color=auto'
/usr/bin/ls #(注:环境变量)[root@sanchuang-linux chenpeng]# echo $PATH #(注:环境变量)/lianxi/sc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/root/bin:/usr/local/nginx5/sbin:/root/bin
示例 2:局部变量
-------------------------------------------
a=1
echo $a
echo ${a}
知识点 8.2 变量名命名规定
变量名命名规定:
由数字、字母、下划线组合,不能以数字结尾
不能应用 bash 中的关键字
应用一个定义过的变量,须要在后面加上 $ 符号
示例:--------------------------------------------
[root@sanchuang-linux chenpeng]# echo $PATH #(注:环境变量)/lianxi/sc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin:/root/bin:/usr/local/nginx5/sbin:/root/bin
SHELL 接管参数
知识点 9 shell 接管参数
shell 接管
地位变量:$1 - $9,别离代表参数列表中的 第 1 - 9 个参数
能够重复使用(即脚本里能够呈现两个 $1)
预约义变量,零碎预留的一些变量:
$0 以后过程 或者 脚本名称
$! 后盾运行的最初一个过程的 pid 号
$? 上一条命令程序返回值
$* 代表所有参数内容
$$ 示意以后过程 pid 号
$# 示意参数个数
$@ 代表所有参数(一一提取)
# perror 1
查看命令的返回值,并且看返回值的 具体含意
$? 命令返回值为 0 示意失常执行
不为 0 都示意运行谬误
示例如下:__________________________________
[root@mysql-binary shell_test]# echo $?
1
[root@mysql-binary shell_test]# perror 1
OS error code 1: Operation not permitted
#!/bin/bash 脚本前最好加上这一行,默认应用什么解释器去执行
起因:类 unix 操作系统,unbuntu、debian、centos 每个操作系统的默认 bash 可能不一样
示例 1:地位变量 $1、$2
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
[root@sanchuang-linux shell_test]# cat canshu.sh
\#!/bin/bash
echo “######## 这是 $1########” #(注:地位变量)
echo “$1” #(注:地位变量)
echo “######## 这是 $2########” #(注:地位变量)
echo “$2” #(注:地位变量)
[root@sanchuang-linux shell_test]# sh canshu.sh "hello" "world" #
(注:传了 2 个参数)
\######## 这是 hello######## #(注:参数 1)
hello
\######## 这是 world######## #(注:参数 2)
world
示例 2:预约义变量 $0
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
[root@sanchuang-linux shell_test]# echo $0 #(注:$0 以后过程 或者 脚本名称)-bash
[root@sanchuang-linux shell_test]# sh canshu.sh "hello" "world"
######## 这是 hello########
hello
######## 这是 world########
world
canshu.sh #(注:$0 以后过程 或者 脚本名称)[root@sanchuang-linux shell_test]# cat canshu.sh
#!/bin/bash
echo "######## 这是 $1########"
echo "$1"
echo "######## 这是 $2########"
echo "$2"
echo "$0"
示例 3:预约义变量 $* $# $@
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
[root@sanchuang-linux shell_test]# vim canshu.sh
#!/bin/bash
echo "######## 这是 $1########"
echo "$1"
echo "######## 这是 $2########"
echo "$2"
echo "$0"
echo "这是所有:$*" #(注:$* 代表所有参数内容)echo "参数 #:$#" #(注:$# 示意参数个数)echo "这是 @:$@" #(注:$@ 代表所有参数(一一提取))──────────────────────────────────────────────
[root@sanchuang-linux shell_test]# sh canshu.sh hello world 2020 #(注:3 个参数)######## 这是 hello########
hello
######## 这是 world########
world
canshu.sh
这是所有:hello world 2020
参数 #:3
这是 @:hello world 2020
知识点 10 python 中接管参数 sys 模块
python 中
sys 模块外面的 argv 属性。python 前面 传过来的参数是一个 列表
,而后获取第一个第二个
[root@sanchuang-linux ~]# vim canshu.py
import sys
print(sys.argv[1],sys.argv[2]) #(注:1 接管参数 1,2 接管参数 2)print(sys.argv[0]) #(注:0 是文件名)----------------------------------------------------------------------
[root@sanchuang-linux ~]# python3 canshu.py "hello" "world"
hello world
canshu.py
数据类型
知识点 11 数据类型
shell 罕用数字、字符串、数组
字符串的定义,能够应用单引号,也能够应用双引号,也能够不必引号
示例:字符串的定义__________________
[root@sanchuang-linux ~]# echo abc
abc
[root@sanchuang-linux ~]# a=b
[root@sanchuang-linux ~]# echo $a
b
[root@sanchuang-linux ~]# a="b"
[root@sanchuang-linux ~]# echo $a
b
[root@sanchuang-linux ~]# a='b'
[root@sanchuang-linux ~]# echo $a
b
示例:数字的定义_________________
[root@sanchuang-linux ~]# a=1
[root@sanchuang-linux ~]# a=2
引号区别
知识点 12 引号区别:双引号能够辨认变量,单引号不能够辨认变量
引号区别:双引号能够辨认变量,单引号不能够
[root@sanchuang-linux ~]# head -n1 /etc/passwd #(注:输入 passwd 第一条)root:x:0:0:root:/root:/bin/bash
[root@sanchuang-linux ~]# cat /etc/passwd |head -n1 #(注:不倡议用这个 2 条命令)root:x:0:0:root:/root:/bin/bash
#!/bin/bash
# 字符串操作
line=`head -n1 /etc/passwd` #(注:应用反引号 ``)(注:把命令输入保留在 line 外面)echo $line
---------------------------------------------------------------------------------
[root@sanchuang-linux chenpeng]# bash test2.sh
root:x:0:0:root:/root:/bin/bash
示例:双引号能够辨认变量,单引号不能够辨认变量 \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
echo "字符串为:$line"
字符串为:root:x:0:0:root:/root:/bin/bash
------------------------------------------
echo '字符串为:$line'
字符串为:$line
字符串操作
知识点 13 字符串操作
截取
截取前 4 个字符:echo ${line:0:4}
截取后 9 个字符 echo ${line:0-9}
从倒数第九个字符开始截取 4 个字符 echo ${line:0-9:4}
从左向右截取最初一个:后的字符 echo ${line##*:}
从左向右截取第一个:后的字符 echo ${line#*:}
从右往左截取最初一个:后的字符 echo ${line%%:*}
从右向左截取第一个:后的字符 echo ${line%:*}
字符串长度 echo ${#line}
示例:字符串操作_______________________________
# 字符串操作
[root@sanchuang-linux chenpeng]# vim test2.sh
line=`head -n1 /etc/passwd`
echo $line #(注:root:x:0:0:root:/root:/bin/bash)echo "字符串为:$line" #(注:字符串为:root:x:0:0:root:/root:/bin/bash)echo '字符串为:$line' #(注:字符串为:$line)echo "截取前 4 个字符:"
echo ${line:0:4} #(注:root)echo "截取后 9 个字符"
echo ${line:0-9} #(注:/bin/bash)echo "从倒数第九个字符开始截取 4 个字符"
echo ${line:0-9:4} #(注:/bin)echo "从左向右截取最初一个:后的字符"
echo ${line##*:} #(注:/bin/bash)echo "从左向右截取第一个:后的字符"
echo ${line#*:} #(注:x:0:0:root:/root:/bin/bash)echo "从右往左截取最初一个:后的字符"
echo ${line%%:*} #(注:root)echo "从右向左截取第一个:后的字符"
echo ${line%:*} #(注:root:x:0:0:root:/root)echo "字符串长度"
echo ${#line} #(注:31)-----------------------------------------------
[root@sanchuang-linux chenpeng]# bash test2.sh
root:x:0:0:root:/root:/bin/bash
字符串为:root:x:0:0:root:/root:/bin/bash
字符串为:$line
截取前 4 个字符:root
截取后 9 个字符
/bin/bash
从倒数第九个字符开始截取 4 个字符
/bin
从左向右截取最初一个:后的字符
/bin/bash
从左向右截取第一个:后的字符
x:0:0:root:/root:/bin/bash
从右往左截取最初一个:后的字符
root
从右向左截取第一个:后的字符
root:x:0:0:root:/root
字符串长度
31
练习 13 截取百度网址
line="http://www.baidu.com/login"
# 截取出:login
echo ${line:0-5} #(注:取最初 5 个字符)echo ${line##*/} #(注:从左往右最初一个 / 后的内容)# 截取出:www.baidu.com/login
echo ${line##*//}
# 截取出:http://www.baidu.com
echo ${line%/*}
# 截取出:http:
echo ${line%%/*}
数值的运算与比拟
知识点 14 数值的运算与比拟
数值的运算:
第一种:$((表达式))
第二种:$[表达式]
第三种:expr 表达式
留神表达式运算符 左右空格
示例:↓↓↓↓↓↓↓↓↓↓↓↓↓↓
[root@sanchuang-linux ~]# a=10
[root@sanchuang-linux ~]# b=20
[root@sanchuang-linux ~]# $(($a + $b))
-bash: 30: 未找到命令
[root@sanchuang-linux ~]# echo $(($a + $b))
30
[root@sanchuang-linux ~]# echo $[$a +$b]
30
[root@sanchuang-linux ~]# expr $a + $b
30
[root@sanchuang-linux ~]# expr $a+$b
10+20
SHELL 构造语句,循环和判断
知识点 15 shell 构造语句,循环和判断
知识点 15.1 for 循环
for 循环
语法 1:↓↓↓↓↓↓↓↓
-----------------------
for 变量 in 值 1 值 2
do
循环执行语句
done
=======================================
语法 2:↓↓↓↓↓↓↓
---------------------------------------
# for ((i=0;i<3;i++))
for ((初始化变量; 完结循环的条件; 运算))
do
循环执行的语句
done
知识点 15.2 while 循环
While 循环
语法 1:↓↓↓↓↓
---------------------------------------
while read line
do
循环执行语句
done
=======================================
语法 2↓↓↓↓↓↓↓↓↓
---------------------------------------
while [条件(非必选)]:
do
循环执行语句
done
=======================================
注:也反对 break,continue
知识点 15 判断
知识点 15.3 if 语句
if 语句
语法 1:↓↓↓↓↓
-------------------------
if 条件
then
执行语句
fi
=========================
语法 2:↓↓↓↓↓
if 条件
then
执行语句
else
执行语句
fi
==========================
语法 3:↓↓↓↓↓↓
----------------------
if [command];then
合乎该条件执行的语句
elif [command];then
合乎该条件执行的语句
else
合乎该条件执行的语句
fi
知识点 15.4 case 语句
case 语句
语法:↓↓↓↓↓________________
case $ 变量名 in
条件 1)
执行语句一
;;
条件 2)
执行语句二
;;
*)esac
练习 16
编写一个 shell 脚本
接管用户输出的两个数,而后抉择要对着两个数进行什么计算,并且输入后果
实现菜单抉择
\=\=\=\=\=\=\=\==\=\=\=\=\=\=\=
- add 加法
- sub 减法
- mul 乘法
- exit 退出
\=\=\=\==\=\=\=\=\=\=\=\=\=\=\=
注:菜单抉择用 case、服务重启脚本用 case
示例:↓↓↓↓↓↓↓↓↓_________________________
[root@sanchuang-linux chenpeng]# vim num_test.sh
#!/bin/bash
read -p "请输出数字一:" num1
read -p "请输出数字二:" num2
echo "================"
echo "1.add 加法"
echo "2.sub 减法"
echo "3.mul 乘法"
echo "4.exit 退出"
echo "================"
read -p "请输出你的抉择:" options
case $options in
1)
echo "两数相加为:$(($num1 + $num2))"
;;
2)
echo "两数相减为:$(($num1 - $num2))"
;;
3)
echo "两数相乘为:$(($num1 * $num2))"
;;
4)
echo "退出!"
exit
esac
-------------------------------------------------------------------------------------------
整成函数模式
add(){echo "两数相加为:$(($num1 + $num2))"
}
case $options in
1)
add #(注:须要应用的时候调用);;
2)…………………………
/etc/init.d 服务的启动脚本
知识点 17 /etc/init.d 服务的启动脚本
/etc/init.d/ 放着服务的启动脚本
[root@sanchuang-linux chenpeng]# cd /etc/init.d/
[root@sanchuang-linux init.d]# ls
functions README
示例:服务重启脚本用 case↓↓↓↓↓__________________
case $mode in
start)
启动
;;
stop)
敞开(应用 kill 命令)
;;
restart)
敞开
启动
;;
reload)
从新加载配置(应用 kill -HUP);;
esac
kill
知识点 18 kill
kill 用来删除正在执行中的程序或者工作
kill 能够将指定的信息发送给程序
# kill -l 能够查看 kill 信号量(kill -L(小写))# kill -0 用来检测过程是否存在,当过程不存在时,kill -0 会报错
# kill -1 pid 从新加载过程(罕用)# kill -HUP pid 和 kill -1 pid 是一样的
# kill -1 pid 或者 kill -HUP pid 都示意从新加载这个文件
# kill -9 强制杀死
# kill -15 失常进行一个过程
kill 不接信号量的时候,默认为信号 15
除了 9 号信号,其余信号过程都有权力拒绝执行!
注:从新加载 相当于 加载最新的配置 服务还是失常运行的(连贯不会断)
重启 服务会断
示例:↓↓↓↓↓↓↓↓↓____________
[root@sanchuang-linux ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
…………………………
63) SIGRTMAX-1 64) SIGRTMAX
SHELL 编程 if 判断
知识点 19 shell 编程 if 判断
if 判断
示例:↓↓↓↓↓↓____________________________________________________________
[root@sanchuang-linux ~]# if id wenyao; then echo "ok"; else echo "error"; fi
id:“wenyao”:无此用户
error
--------------------------------------------------------
等同于:↓↓↓↓↓________________________________________________
if id wenyao;
then
echo "ok";
else
echo "error";
fi
[]
知识点 20 []
[]示意条件测试
留神这里的空格很重要。要留神在 '[‘ 前面和 ’]’ 后面都必须要有空格。
罕用判断:[-d FILE] 如果 FILE 存在且是一个目录则返回为真。[-f FILE] 如果 FILE 存在且是一个一般文件则返回为真。[-e ****] 判断文件 / 文件夹是否存在
字符串判断:[-z STRING] 如果 STRING 的长度为零则返回为真,即空是真
[-n STRING] 如果 STRING 的长度非零则返回为真,即非空是真
[STRING1] 如果字符串不为空则返回为真, 与 - n 相似
[STRING1 == STRING2] 如果两个字符串雷同则返回为真
[STRING1 != STRING2] 如果字符串不雷同则返回为真
[STRING1 < STRING2] 如果“STRING1”字典排序在“STRING2”后面则返回为真。[STRING1 > STRING2] 如果“STRING1”字典排序在“STRING2”前面则返回为真。数值判断
[INT1 -eq INT2] INT1 和 INT2 两数相等返回为真 ,=
[INT1 -ne INT2] INT1 和 INT2 两数不等返回为真 ,<>
[INT1 -gt INT2] INT1 大于 INT2 返回为真 ,>
[INT1 -ge INT2] INT1 大于等于 INT2 返回为真,>=
[INT1 -lt INT2] INT1 小于 INT2 返回为真 ,<
[INT1 -le INT2] INT1 小于等于 INT2 返回为真,<=
逻辑判断
[! EXPR] 逻辑非,如果 EXPR 是 false 则返回为真。[EXPR1 -a EXPR2] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。[EXPR1 -o EXPR2] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。[] || [] 用 OR 来合并两个条件
[] && [] 用 AND 来合并两个条件
示例:↓↓↓↓↓↓↓↓↓↓↓↓↓
[root@sanchuang-linux ~]# a=10
[root@sanchuang-linux ~]# b=20
[root@sanchuang-linux ~]# if [$a -gt $b];then echo "a>b";else echo "a<b";fi #(注:正确)a<b
[root@sanchuang-linux ~]# if [$a > $b];then echo "a>b";else echo "a<b";fi #(注:出错)a>b(注:应用 2 个中括号不出错)[root@sanchuang-linux ~]# if [[$a > $b]];then echo "a>b";else echo "a<b";fi #(注:正确)a<b
[root@sanchuang-linux ~]# if [$a -gt $b] && [$a -ne 20];then echo "输入 a >b";else echo "输入 a <b";fi
输入 a <b
练习 21
判断当前目录下是否存在文件 a,没有的话就创立
有的话输入,输入文件已存在
示例:↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
写法 1:if [-f a.txt];
then echo "文件存在"
else
touch a.txt
fi
-------------------------------------------------
写法 2:举荐(相似 python 的 if 三元运算符)[-f a.txt] && echo "文件已存在" || touch a.txt
示例 2:
编写一个脚本,实现如下性能
\=\=\==\=\=\=\=\==\=\=\=\=
1. 减少用户并设置明码
2. 删除用户
3. 查看用户
4. 退出
\=\=\=\==\=\=\=\=\=\==\=\=
输出的指定不是 1 -4,给提醒给予揭示,并且如果不输出退出的话,能够循环增加。
按 1 减少用户,并且设置明码 useradd passwd
按 2 删除用户 userdel -r
按 3 查看用户 id
按 4 退出 exit
&& ||
知识点 22 相似 python 的 if 三元运算符
应用 && || 来实现
·cmd1 && cmd2 如果 cmd1 执行成 功,或者为真,则执行 cmd2
·cmd1 || cmd2 如果 cmd1 执行不胜利,或者为假,则执行 cmd2
·cmd1 && cmd2 || cmd3 如果 cmd1 执行胜利,就执行 cmd2,不胜利就执行 cmd3
示例:上个练习↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
[-f a.txt] && echo "文件已存在" || touch a.txt
[[-f a.txt]] && echo "文件已存在" || touch a.txt #(注:举荐应用两个中括号)示例:-------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# a=10
[root@sanchuang-linux ~]# b=20
[root@sanchuang-linux ~]# [$a -gt $b] && echo "输入 a>b"
[root@sanchuang-linux ~]# [$a -gt $b] || echo "输入 a<b"
输入 a<b
[root@sanchuang-linux ~]# [$a -gt $b] && echo "输入 a>b" || echo "输入 a<b"
输入 a<b
[]、[[]]、(()) (判断形式)
知识点 23 []、[[]]、(()) (判断形式)
[] 会做单词拆分
[] 很多示意都不是很反对, 倡议应用 [[]] 判断(2 个中括号)
总结:·倡议应用
[[]] 来比拟运算,进行判断
·字符串用
[[]](举荐)·数字用比拟用
(())
论断:倡议应用 [[]] 来比拟运算,进行判断
示例 1:if 判断时
-------------------------------------------------------------------------------------------
[root@sanchuang-linux chenpeng]# name="wen yao"
[root@sanchuang-linux chenpeng]# [$name == "wen yao"] && echo "ok" || echo "error"
-bash: [: 参数太多 #(注:主动做单词拆分)error
[root@sanchuang-linux chenpeng]# [[$name == "wen yao"]] && echo "ok" || echo "error"
ok #(注:举荐应用 2 个中括号)[root@sanchuang-linux chenpeng]# ["$name" == "wen yao"] && echo "ok" || echo "error"
ok #(注:应用引号连贯在一起,示意一个整体)============================================================================================
示例 2:数值比拟
-------------------------------------------------------------------------------------------
[root@mysql-binary shell_test]# echo $a
10
[root@mysql-binary shell_test]# echo $b
20
[root@mysql-binary shell_test]# [[$a > $b]] && echo "ok" || echo "error"
error
[root@mysql-binary shell_test]# [$a > $b] && echo "ok" || echo "error"
ok #(注:出错)[root@mysql-binary shell_test]# (($a == $b)) && echo "ok" || echo "error"
error
示例:--------------------------------------------------------------------------------------------
[root@mysql-binary shell_test]# a=10
[root@mysql-binary shell_test]# b=20
[root@mysql-binary shell_test]# [[$a -eq $b]] && echo "ok" || echo "eroor"
eroor
[root@mysql-binary shell_test]# (($a -eq $b)) && echo "ok" || echo "eroor"
-bash: ((: 10 -eq 20 : 表达式中有语法错误(谬误符号是 "20")Eroor
----------------------------------------------------------------------------
[root@mysql-binary shell_test]# c=102
[root@mysql-binary shell_test]# b=20
[root@mysql-binary shell_test]# [[$c > $b]] && echo "ok" || echo "eroor"
eroor
[root@mysql-binary shell_test]# (($c > $b)) && echo "ok" || echo "eroor"
ok
示例 3:if 条件判断的 2 种写法
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# a=10
[root@sanchuang-linux ~]# b=20
[root@sanchuang-linux ~]# if [[$a > $b]]; then echo "ok"; else echo "error"; fi
error
[root@sanchuang-linux ~]# [[$a > $b]] && echo "ok" || echo "error"
error
示例:字符串比拟(()) 也能够
--------------------------------------------------------------------------------------------
[root@sanchuang-linux ~]# a=abc
[root@sanchuang-linux ~]# b=abc1
[root@sanchuang-linux ~]# (($a > $b)) && echo "ok" || echo "error"
error
[root@sanchuang-linux ~]# a=abc
[root@sanchuang-linux ~]# b=bac1
[root@sanchuang-linux ~]# (($a > $b)) && echo "ok" || echo "error"
error
[root@sanchuang-linux ~]# a=abc
[root@sanchuang-linux ~]# b=abc
[root@sanchuang-linux ~]# (($a == $b)) && echo "ok" || echo "error"
ok
论断:倡议应用 [[]] 来比拟运算,进行判断
SHELL 函数 定义
知识点 24 Shell 函数 定义
示例:add() {echo "两数相加为:$(( $num1 + $num2))" #(注:函数外面的操作内容)}
------------------------------------------------
调用的时候 add
case $options in
1)
add
;;
2)……………………
--------------------------------------------------------------------------------------------
add(){echo "两数相加为:$(($num1 + $num2))"
}
case $options in
1)
add #(注:须要应用的时候调用);;
2)…………………………
判断形式 [] [[]] (()) test
知识点 25 判断形式 [] [[]] (()) test
- (()) 判断数字 > < == !=
- [[]] 判断字符串 或者 -eq -ne -gt -lt 判断数字
- 有些语法 [] 是不反对的,倡议应用[[]]
- test(测试)判断,等同于 1 个中括号
示例:test
---------------------------------------------------------------------
[root@sanchuang-linux ~]# a=123
[root@sanchuang-linux ~]# b=123
[root@sanchuang-linux ~]# test a==b && echo ok
ok
[root@sanchuang-linux ~]# test a==b && echo ok || echo error
ok