12_linux笔记-shell脚本命令

  • 回顾1 输入输出重定向
    • 输入
    • 输出
  • 知识点2 2个特殊文件
    • 示例:/dev/zero:用来生成指定大小的文件,生成一堆0
    • 示例
  • 知识点3 here document
    • 示例
  • 知识点3.2 EOF是文档结束标志 可以自行定义 (end of file)
    • 示例
  • 知识点4 tee命令
    • 示例
  • 知识点5 清空文件内容
    • 示例
  • 知识点6 echo
  • 知识点7 shell入门
  • 知识点8 shell的变量
    • 示例:环境变量
    • 示例2:局部变量
  • 知识点8.2 变量名命名规则
  • 示例
  • 知识点9 shell接收参数
    • 示例
    • 示例1:位置变量$1、$2
    • 示例2:预定义变量 $0
    • 示例3:预定义变量 $* $# $@
  • 知识点10 python中接收参数 sys模块
  • 知识点11 数据类型
    • 示例:字符串的定义
    • 示例:数字的定义
  • 知识点12 引号区别:双引号可以识别变量,单引号不可以识别变量
    • 示例:双引号可以识别变量,单引号不可以识别变量
  • 知识点13 字符串操作
    • 示例:字符串操作
  • 练习13 截取百度网址
  • 知识点14 数值的运算与比较
    • 示例
  • 知识点15 shell结构语句,循环和判断
  • 知识点15.1 for循环
    • 语法1
    • 语法2
  • 知识点15.2 while循环
    • 语法1
    • 语法2
  • 知识点15 判断
  • 知识点15.3 if语句
    • 语法1
    • 语法2
    • 语法3
  • 知识点15.4 case语句
    • 语法
  • 练习16
    • 示例
    • 整成函数形式
  • 知识点17 /etc/init.d 服务的启动脚本
    • 示例:服务重启脚本用case
  • 知识点18 kill
    • 示例
  • 知识点19 shell编程 if判断
    • 示例
  • 知识点20 [ ]
    • 示例
  • 练习21
    • 写法1
    • 写法2:推荐(类似python的if三元运算符)
  • 示例2
  • 知识点22 类似python的if三元运算符
    • 示例
    • 示例
  • 知识点23 [] 、[[]]、 (()) (判断方式)
    • 示例1:if判断时
    • 示例2:数值比较
    • 示例
    • 示例3:if条件判断的2种写法
    • 示例:字符串比较(( )) 也可以
  • 知识点24 Shell函数 定义
    • 示例
  • 知识点25 判断方式 [] [[]] (()) test
    • 示例:test

博客cpen_web

回顾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个特殊文件

·/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数据单位数量

知识点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

知识点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 选项 不接换行

知识点7 shell入门

shell入门
shell 是一个用C语言写的程序,它是用户使用linux的桥梁
shell 脚本 实现自动化 重复性的操作编写脚本完成,减少人工失误

知识点8 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

知识点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/bashecho "########这是$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/bashecho "########这是$1########"
echo "$1"
echo "########这是$2########"
echo "$2"echo "$0"

示例3:预定义变量 $* $# $@

[root@sanchuang-linux shell_test]# vim canshu.sh
#!/bin/bashecho "########这是$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 sysprint(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

知识点15 shell结构语句,循环和判断

知识点15.1 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/bashread -p "请输入数字一:" num1
read -p "请输入数字二:" num2echo "================"
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)…………………………

知识点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

知识点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 -l1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP6) SIGABRT    7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
…………………………
63) SIGRTMAX-1  64) SIGRTMAX

知识点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 "文件存在"
elsetouch 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

结论:建议使用[[ ]]来比较运算,进行判断

知识点24 Shell函数 定义

示例

add() {echo "两数相加为:$(( $num1 + $num2 ))"       #(注:函数里面的操作内容)
}

调用的时候 add

case $options in
1)
add
;;
2)……………………
add(){echo "两数相加为:$(($num1 + $num2))"
}case $options in
1)add           #(注:需要使用的时候调用);;
2)…………………………

知识点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

12_linux笔记-shell脚本命令相关推荐

  1. linux定时监控端口并重新启动shell脚本命令

    以tomcat为例,监控并启动应用服务的端口shell脚本命令如下 #/bin/bashtime=`date +%Y-%m-%d-%H:%M` echo "app-Script start ...

  2. 【莹伙丛】我是如何设置 IDEA 以方便执行shell 脚本命令的?

    [莹伙丛]我是如何设置 IDEA 以方便执行shell 脚本命令的? 前言 如何设置 其他 前言 鉴于目前的办公电脑使用的 WIN10 ,安装的windows 版本的 IDEA . 在 IDEA 中有 ...

  3. win7 cmd终端连接android手机运行adb shell脚本命令

    win7 cmd终端连接android手机运行adb shell脚本命令 (2013-03-22 20:13:57) 转载▼ 标签: android it shell 连接 linux 分类: 嵌入式 ...

  4. Windows的cmd终端连接android手机运行adb shell脚本命令

    下载如下3个文件到PC本地 图1 上述文件扫码回复1001可下载,并可查看历史干货文章 将手机通过USB连接PC后,会在设备管理其中出现相关驱动,如下图所示 图2 点击电脑屏幕左下方的开始菜单,输入c ...

  5. shell脚本命令set

    文章目录 1. 简介 2. set -e 3. set -o pipefail 4. set -u 5. set -x 6. 总结 1. 简介 在写shell的时候我们经常面临的问题一般都是: she ...

  6. Linux:shell脚本命令: /dev/null 21 的理解

    1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和 ...

  7. linux shell运行脚本命令行参数,shell脚本命令行参数简介

    之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互. bash shell提供了命令行参数添加在命令后面的数据值).命令行选项修改命令行为的单字符值)和直接读取键盘输入. 1.命 ...

  8. Linux下Shell脚本命令行参数:getopt、getopts用法

    目录 简介 getopt 简介 支持选项 用法 getopt optstring parameters getopt [options] [--] getopt [options] -o|--opti ...

  9. Shell脚本命令(长期更新)

    1.#!/bin/bash: #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell 2.echo: 向窗口输出文本,如echo "hello,world! ...

最新文章

  1. 织梦生成html加速,加快DEDECMS静态html网页生成速度的方法
  2. 【Leecode】两数相加
  3. 低复杂度 - 服务网格的下一站
  4. JavaScript 与 ASP.NET 页面的完美结合(转)
  5. 【超值干货】10个案例告诉你,数据如何驱动产品设计
  6. js 字符串截取_【js】让你一次性搞清楚slice,substr,substring字符串截取函数
  7. C语言学习之有一个分数序列2/1、3/2、5/3、8/5、13/8、21/13,……求出这个数列的前20项之和。
  8. mysql分组之后统计数量
  9. pyqt5框内显示图像_【好工具】VisualStudio下图像调试神器
  10. 使用 ADB LogCat 查看在Android真机上 Unity debug.log 输出日志
  11. spring aop 会根据实际情况(有无接口)自动选择 两种 动态代理(jdk和cglib)之一...
  12. Linux工作笔记030---Centos7.3启动tomcat 输入startup.sh后提示command not found
  13. 缺陷管理规范--bug管理流程
  14. angular2+typescript在asp.net MVC Web项目上的实现
  15. phpmyadmin的安装和使用
  16. 十分钟快速了解《你不知道的 JavaScript》(上卷)
  17. 怎么获取求生之路服务器信息失败,新人服务器出现问题 求助求助!!!!!...
  18. viewpage滑动查看图片并再有缩略图预览
  19. 视频分辨率全表(101种)
  20. 三进制计算机基本原理,三进制(三进制计算机)

热门文章

  1. WIFI安全:利用Kali自带的Aircarck-ng工具包,以及Fluxion渗透wap/wap2无线WIFI,超详细。(前言:无线网卡选择,环境详尽信息)2020.01
  2. 如何优化服务器的性能
  3. 这是我见过的“最美”数据中心机房布线
  4. Centos 服务器禁止 IP访问/ IP黑名单
  5. 这可能是最通俗的 React Fiber 打开方式
  6. linux 挖矿病毒清理
  7. 名帖389 傅山 草书《千字文》
  8. icloud android同步到iphone6s,安卓手机竟能同步苹果iCloud:啥黑科技?
  9. 飞鸽传书来解释 HTTPS 机制
  10. 用java从网上爬取大部头小说