mycpen

Mycpen

记录学习历程与受益知识
github
telegram
bilibili

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 脚本

接收用户输入的两个数,然后选择要对着两个数进行什么计算,并且输出结果

实现菜单选择

================

  1. add 加法

  2. sub 减法

  3. mul 乘法

  4. 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

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。