@

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

10_Linux基础-SHELL入门1的更多相关文章

  1. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  2. Linux shell入门基础(一)

    Linux shell入门基础(一): 01.增加删除用户: #useradd byf   userdel byf(主目录未删除)  userdel -r byf   该用户的属性:usermod 用 ...

  3. Linux基础知识入门

    [Linux基础]Linux基础知识入门及常见命令.   前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1: ...

  4. cmd 与 bash 基础命令入门

    身为一个程序员会用命令行来进行一些简单的操作,不是显得很装逼嘛!?嘿嘿~ ヾ(>∀<) cmd 与 bash 基础命令入门       简介       CMD 基础命令          ...

  5. Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码

    Hadoop基础-MapReduce入门篇之编写简单的Wordcount测试代码 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习MapReduce时的一些 ...

  6. [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)

    linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...

  7. Shell入门01

    Shell入门 1.基于硬件的虚拟化 2.基于平台的虚拟化 3.基于服务的虚拟化 4.基于库的虚拟化 5.基于操作系统的虚拟化 管理员使用Shell程序与操作系统进行交互,之前学习的shell脚本都是 ...

  8. 自学linux——11.shell入门

    shell 基础 1.shell介绍(内置脚本) 程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理) 语法简单,代码写起来比较轻松,简单易学 (1)什么是shell shell ...

  9. IM开发者的零基础通信技术入门(二):通信交换技术的百年发展史(下)

    1.系列文章引言 1.1 适合谁来阅读? 本系列文章尽量使用最浅显易懂的文字.图片来组织内容,力求通信技术零基础的人群也能看懂.但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获.如果您大 ...

随机推荐

  1. Redis之Lua的应用(四)

    一.什么是Lua脚本 Lua是一个高效的轻量级脚本语言(和JavaScript类似),用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.Lu ...

  2. AspNetCore&云效Flow持续集成

    如今有了越来越多的持续集成工具,给的个人开发者的福利也是很足了,如无必要,自建工具有时只是作为练手了. 众多持续集成工具 现在可用的持续集成工具繁多,各大云服务商都推出了持续集成,甚至是一定条件内都是 ...

  3. Linux yum搭建私有仓库

    搭建yum仓库需要两种资源: rpm包 rpm包的元数据(repodata) 搭建好仓库后需要使用三种网络协议共享出来 http或https ftp 范例: 使用http协议搭建私有仓库 (本示例使用 ...

  4. bat-静默安装并配置mysql(windows版)

    mysql版本 mysql-5.6.35-winx64 路径关系 @echo off Setlocal enabledelayedexpansion @REM vscode中自动开启延迟环境变量扩展, ...

  5. 入行数字IC验证后会做些什么?

    半年前,公众号写了第一篇推文<入行数字IC验证的一些建议>,介绍了IC小白可以如何一步一步地摸索入门数字IC验证,同时也在知乎发了这篇入门贴,并且衍生出很多额外基础的内容,收获了不少的浏览 ...

  6. SpringBoot配置多环境下的properties配置文件

    1.新建SpringBoot项目之后,再另外创建两个properties文件 2.配置详情 主文件 dev和test文件 两者只是里面的配置信息有所不同而已,比如mysql, redis, nacos ...

  7. IDEA的项目结构和IDEA的HelloWord

    IDEA首次驱动 1. 选择不导入任何设置,点击 OK 2. 选择 Create New Project 3. 点击 new 按钮,配置安装的 JDK9 版本 选择 JDK9 目录,点击确定 4. 不 ...

  8. CSS Houdini:用浏览器引擎实现高级CSS效果

    vivo 互联网前端团队-Wei Xing Houdini被称之为Magic of styling and layout on the web,看起来十分神秘,但实际上,Houdini并非什么神秘组织 ...

  9. Vue 路由懒加载, VueRouter一步完成Vue的路由懒加载 一行代码搞定懒加载

    Vue Router路由配置中的component里面配置即可 1 // 路由懒加载的方式加载组件 2 3 component: () => import('@/views/Detail'), ...

  10. Webpack学习系列 - Webpack5 怎么集成Babel ?

    程序员优雅哥简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要通过实操讲解运用Webpack 5 如何集成 Babel Babel 对于前端 ...