建设银行内部网站6,建筑学院官网,jsp简述网站开发流程,电影《设计》Linux之Shell脚本编程入门 文章目录 Linux之Shell脚本编程入门Shell脚本编程入门1. 脚本格式2. 第一个Shell脚本#xff1a;hello World3.第二个 shell脚本#xff1a;duo命令处理4. shell中变量4.1 常用系统变量4.2 自定义变量4.3 特殊字符: $n4.4 特殊变量: $#4.5 特殊变量…Linux之Shell脚本编程入门 文章目录 Linux之Shell脚本编程入门Shell脚本编程入门1. 脚本格式2. 第一个Shell脚本hello World3.第二个 shell脚本duo命令处理4. shell中变量4.1 常用系统变量4.2 自定义变量4.3 特殊字符: $n4.4 特殊变量: $#4.5 特殊变量: ∗ 与 *与 ∗与4.6 特殊变量: $? 5. 运算符5.1 基本语法5.2 实操案例 6. 条件判断6.1 基本语法6.2 常用判断条件6.3 实操案例 7.流程控制7.1 if 判断7.2 case 语句7.3 for循环7.4 while 循环7.5 read读取控制台输入 What is Shell Shell是一个命令行解释器它接收应用程序/用户命令然后调用系统操作内核。 Shell还是一个功能相当强大的编程语言易编写、易调试、灵活性强。 Shell脚本编程入门
查看Linux系统已提供的shell解释器
cat /etc/shells查看当前系统使用的默认shell解释器
echo $SHELL1. 脚本格式
脚本一**#/bin/bash**开头(指定解析器)
2. 第一个Shell脚本hello World
# 1. touch hello.sh# 2.vim hello.sh# 3.输入下面内容
#/bin/bash
echo Hello World!#4.执行hello.sh
sh hello.sh
#或 bash hello.sh
#或使用绝对路径
# sh /home/myShell/hello.sh
# bash /home/myShell/hello.sh
# 5.打印结果
Hello World!#6.使用./hello.sh 执行时提示权限不够
[rootMiWiFi-R4CM-srv myShell]# ./hello.sh
-bash: ./hello.sh: 权限不够
# 6.1 授权
chmod 777 hello.sh
# 6.2 再使用 ./ 执行hello.sh
./hello.sh
#或使用绝对路径如下:
/home/myShell/hello.sh 为什么使用 sh 或bash执行shell脚本时不需要执行权限而使用**./**执行shell脚本时需要执行权限呢 使用sh或bash时本质时bash解析器帮你执行脚本所以脚本本身不需要执行权限使用./执行shell时,本质是脚本需要自己执行所有需要执行权限 3.第二个 shell脚本duo命令处理
需求创建一个shell脚本本脚本可以在 /home/myShell/目录下建立test.txt文件,并向test.txt文件中增加“I love shell”;
创建一个名为“appendStr.sh”的shell脚本内容如下
#!/bin/bash
cd /home/myShell/
touch test.txt
echo I love shell test.txt4. shell中变量
4.1 常用系统变量
$HOME $PWD $ SHELL $USER等
echo $HOMEecho $PWDecho $SHELLecho $USER4.2 自定义变量
基本语法
定义变量变量名值【注意 两边不能有空格】
# 定义一个变量A赋值为
A1
# 取变量的值
echo $A撤销变量unset 变量名
unset A 声明一个静态变量readonly 变量名注意不能unset重启系统后失效
readonly B2定义变量的规则 变量名可以由字母、数字和下划线组成但不能以数字开头环境变量名建议大写 赋值符号()两边不能有空格 在bash,中变量默认类型都是字符串类型无法直接进行数字运算 变量的值如果有空格需要使用双引号或单引号括起来,如下
DI love shell 或 DI love shell可把变量提升为全局环境变量可供其他Shell程序使用
export 变量名4.3 特殊字符: $n
基本语法
$n: n为数字$0代表该脚本名称$1- 9 代表第一个至第九个参数十以上的参数需要用大括号括起来如 9代表第一个至第九个参数十以上的参数需要用大括号括起来如 9代表第一个至第九个参数十以上的参数需要用大括号括起来如{10} 实操案例 输出该及爱哦本文件名称输入参数1和输入参数2的值
新建文件名为 paramaters.sh 的shell,内容如下
#!/bin/bash
echo $0 $1 $2执行paramaters.sh
[rootMiWiFi-R4CM-srv myShell]# sh inputoutput.sh a b
inputoutput.sh a b4.4 特殊变量: $#
$#功能描述获取所有输入参数的个数如果定义了参数但为输入则为0常用与循环
实操案例
以paramaters.sh为例
#!/bin/bash
echo $0 $1 $2
echo $## 不输入参数的情况
[rootMiWiFi-R4CM-srv myShell]# sh paramaters.sh
inputoutput.sh
0
# 输入参数的情况
[rootMiWiFi-R4CM-srv myShell]# sh paramaters.sh hello this is shell
inputoutput.sh hello this is shell
2[rootMiWiFi-R4CM-srv myShell]# sh paramaters.sh hello this is shell world
inputoutput.sh hello this is shell
34.5 特殊变量: ∗ 与 *与 ∗与
KaTeX parse error: Undefined control sequence: \* at position 1: \̲*̲:这个变量代表命令行中所有的参…*是把所有的参数看成一个整体 : 这个变量也代表命令行中所有的参数但 :这个变量也代表命令行中所有的参数但 :这个变量也代表命令行中所有的参数但把每个参数区分对待
实操案例
# paramaters.sh 内容如下
#!/bin/bashi-R4CM-srv myShell]#
echo $0 $1 $2
echo $#
echo $*
echo $# 执行
[rootMiWiFi-R4CM-srv myShell]# bash paramaters.sh p1 p2 p3
paramaters.sh p1 p2
3
p1 p2 p3 # $* 输出所有参数
p1 p2 p3 # $ 输出所有参数4.6 特殊变量: $?
$?: 最后一次执行的命令的返回状态。如果这个变量的值为0证明上一个命令正确执行如果这个变量的值为非0(具体是哪个参数由命令自己来决定)则证明上一个命令执行不正确
实操案例
[rootMiWiFi-R4CM-srv myShell]# sss
-bash: sss: 未找到命令
[rootMiWiFi-R4CM-srv myShell]# echo $?
127 #未正确执行[rootMiWiFi-R4CM-srv myShell]# ./hello.sh
Hello World!
[rootMiWiFi-R4CM-srv myShell]# echo $?
0 # 正确执行5. 运算符
5.1 基本语法
“ ( ( 运算式 ) ) ”或“ ((运算式))” 或 “ ((运算式))”或“[运算式]”expr , - , *, / , % [expr 加减乘除取余] 注意expr 与运算的数值及运算符之间要有空格
5.2 实操案例
使用 “ ( ( 运算式 ) ) ”或“ ((运算式))” 或 “ ((运算式))”或“[运算式]” 进行计算
# 加法
[rootMiWiFi-R4CM-srv myShell]# ADD$((23))
[rootMiWiFi-R4CM-srv myShell]# echo $ADD
5
# 加、除、减
[rootMiWiFi-R4CM-srv myShell]# SUB$[(35)/2-2]
[rootMiWiFi-R4CM-srv myShell]# echo $SUB
2
# 混合运算
[rootMiWiFi-R4CM-srv myShell]# MULT$[(55)-4*3/2%5]
[rootMiWiFi-R4CM-srv myShell]# echo $MULT
9使用expr 计算
[rootMiWiFi-R4CM-srv myShell]# expr 43
43
#
[rootMiWiFi-R4CM-srv myShell]# expr 4 3
7
# -
[rootMiWiFi-R4CM-srv myShell]# expr 6 - 3
3
# *
[rootMiWiFi-R4CM-srv myShell]# expr 5 \* 3
15
# /
[rootMiWiFi-R4CM-srv myShell]# expr 6 / 3
2
[rootMiWiFi-R4CM-srv myShell]# expr 6 % 5
1
# 计算 2 4 * 5 的值
# 先使用包住括号内的运算然后在*5如下
[rootMiWiFi-R4CM-srv myShell]# expr expr 2 4 \* 5
30
[rootMiWiFi-R4CM-srv myShell]# 6. 条件判断
6.1 基本语法
[condition] (注意condition前后要有空格)
注意条件非空即为true,[yuan]返回true,[]返回false
6.2 常用判断条件
两个整数之间比较
比较符说明字符串比较-lt小于(less than)-le小于等于(less equal)-eq等于(equal)-gt大于(greater than)-ge大于等于(greater than)-ne不等于(Not equal)
按照文件权限进行判断
判断符说明-r有读的权限(read)-w有写的权限(write)-x有执行权限(execute)
按照文件类型进行判断
判断符说明-f文件存在并且是一个常规的文件(file)-e文件存在(existence)-d文件存在并是一个目录(directory)
6.3 实操案例
数字比较运算
# 1 2 ?
[rootMiWiFi-R4CM-srv myShell]# [ 1 -gt 2 ]
[rootMiWiFi-R4CM-srv myShell]# echo $?
127# 1 2 ?
[rootMiWiFi-R4CM-srv myShell]# [ 1 -lt 2 ]
[rootMiWiFi-R4CM-srv myShell]# echo $?
0# 3-1 2 ?
[rootMiWiFi-R4CM-srv myShell]# [ $((3-1)) -eq 2 ]
[rootMiWiFi-R4CM-srv myShell]# echo $?
0文件权限判断练习
[rootMiWiFi-R4CM-srv myShell]# ll
-rwxrwxrwx. 1 root root 32 3月 3 13:00 hello.sh# hello.sh 文件 是否有可写权限
[rootMiWiFi-R4CM-srv myShell]# [ -w hello.sh ]
[rootMiWiFi-R4CM-srv myShell]# echo $?
0 # 有
# hello.sh 文件 是否有可读权限
[rootMiWiFi-R4CM-srv myShell]# [ -r hello.sh ]
[rootMiWiFi-R4CM-srv myShell]# echo $?
0 # 有
# hello.sh 文件 是否有可执行权限
[rootMiWiFi-R4CM-srv myShell]# [ -e hello.sh ]
[rootMiWiFi-R4CM-srv myShell]# echo $?
0 # 有 文件类型练习
# 查看 /home/myShell/test.txt 文件存在且是一个常规文件
[rootMiWiFi-R4CM-srv myShell]# [ -f /home/myShell/test.txt ]
[rootMiWiFi-R4CM-srv myShell]# echo $?0 # 存在
# 查看 /home/myShell/aaa.txt 文件是否存在
[rootMiWiFi-R4CM-srv myShell]# [ -e /home/myShell/aaa.txt ]
[rootMiWiFi-R4CM-srv myShell]# echo $?
1 # 不存在# /home/myShell 是否为一个目录
[rootMiWiFi-R4CM-srv myShell]# [ -d /home/myShell ]
[rootMiWiFi-R4CM-srv myShell]# echo $?
0 #是目录多条判断 表示前一条命令执行成功时才执行后一条命
|| 表示上一条命令执行失败后才执行下一条命令
[ condition ] echo OK || echo NotOK[ condition ] [] || echo NotOK
7.流程控制
7.1 if 判断
基本语法
if [ 条件判断式 ];then# 程序代码
elif [ 条件判断式 ];then# 程序代码
fi
# 或者
if [ 条件判断式 ]then# 程序代码
elif [ 条件判断式 ]then # ...
fi 注意 [ 条件判断式 ]中括号和条件判断式之间必须有空格 if 后要有空格 实操案例
a. 输入一个数字如果输入的是1、2、3则输出具体的数字否则什么也输出
b. 新建一个shell文件名称为control_if.sh ,内容如下
#!/bin/bash
if [ $1 -eq 1 ]
thenecho You entered the number 1
elif [ $1 -eq 2 ]
thenecho You entered the number 2
fi
if [ $1 -eq 3 ];thenecho You entered the number 3
elseecho You entered the other number
fic. 执行control_if.sh
# 不带参数执行
[rootMiWiFi-R4CM-srv myShell]# sh controll_if.sh
controll_if.sh: 第 2 行:[: -eq: 期待一元表达式
controll_if.sh: 第 5 行:[: -eq: 期待一元表达式
controll_if.sh: 第 9 行:[: -eq: 期待一元表达式# 执行controll_if.sh 并带参数1
[rootMiWiFi-R4CM-srv myShell]# sh controll_if.sh 1
You entered the number 17.2 case 语句
基本语法
case $变量名 in值1如果变了的值等于1则执行程序1;;值2如果变量的值等于2则执行程序2;;........
esac 实操案例
新建control_case.sh内容如下
#!/bin/bash
case $1 in
1)echo You entered the number 1
;;
2)echo You entered the number 2
;;
esac执行control_case.sh
[rootMiWiFi-R4CM-srv myShell]# bash control_case.sh 1
You entered the number 17.3 for循环
基本语法1
for ((初始值;循环控制条件;变量变化))
docommand1command2...commandN
done实操案例新建一个control_for.sh内容如下
#!/bin/bash
result0
for((i1;i100;i))
doresult$[$result$i]
done
echo $result基本语法2
for var in item1 item2 ... itemN
docommand1command2...commandN
done实操案例
打印所有输入参数1
创建shell脚本control_for_one.sh内容如下
#!/bin/bash
# $* 任意参数(是个整体)
for i in $*
do echo I love $i
done# $ 任意参数(逐个区分)
for j in $
do echo I love $j
done执行shell control_for_one.sh
[rootMiWiFi-R4CM-srv myShell]# sh control_for_one.sh a b c d e I love aI love bI love cI love dI love e打印所有输入参数2
实操案例
#!/bin/bash
# $*与$ 不加双引号时看不出来区别
for i in $*
do echo I love $i
donefor j in $
do echo I love $j
doneecho # $*与$ 加双引号时区明显
for m in $*
do echo I love $m
done for n in $
do echo I love $n
done执行结果
[rootMiWiFi-R4CM-srv myShell]# sh control_for_one.sh a b c d e I love aI love bI love cI love dI love e
I love a
I love b
I love c
I love d
I love eI love a b c d e
I love a
I love b
I love c
I love d
I love e7.4 while 循环
基本语法
while [条件表达式]
do#code
done 实操案例:请1100的和
创建control_while.sh,内容如下
#!/bin/bash
i1
s0
while [ $i -le 100 ]
dos$(($s$i)) i$(($i1))
done
echo $s执行
[rootMiWiFi-R4CM-srv myShell]# sh control_while.sh
50507.5 read读取控制台输入
基本语法
read [选项] [参数]
选项
-p:指定读取值是的提示符-t:指定读取值时等待的时间(单位秒)
参数
变量指定读取的变量名
实操案例
提示10秒内读取控制台输入的名称;10秒后失效
新建read.sh内容如下
#!/bin/bash
read -t 10 -p Please enter your name in ten second NAME
echo $NAME执行
# 10 秒内输入 aa
[rootMiWiFi-R4CM-srv myShell]# bash read.sh
Please enter your name in ten second aa
aa
# 10 秒内再输入 cc
[rootMiWiFi-R4CM-srv myShell]# cc
cc: 致命错误没有输入文件
编译中断。
[rootMiWiFi-R4CM-srv myShell]#