Shell是一个命令行解释器,它为用户提供了一个想Linux内核发送请求以便程序运行的界面系统级程序。用户可以用Shell来启动、挂起、停止,或者是编写一些程序。
一、Shell脚本的执行方式
脚本的初步编写
1、脚本以 #!/bin/bash开头
2、脚本需要有可执行的权限
如:创建第一个shell程序,输出hello world!
#!/bin/bash
echo “hello world!”
执行方式
1、输入脚本的绝对路径或相对路径(此方法要赋予该脚本可执行权限),如https://www.bilibili.com/read/cv/hello.sh 或/home/hello.sh
2、sh + 脚本名,可以直接执行
二、Shell的变量
Linux Shell的变量分为系统变量和用户自定义变量。
系统变量:\(HOME、\)SHELL、\(USER等等,可用echo输出查看,如echo \)HOME。(输入set 可以查看所有的系统变量)
1、定义变量:变量名=值 (不可加空格)
2、撤销变量:unset 变量名(注意:声明静态变量readonly变量不可用unset撤销)
如:定义一个变量A,使之等于100,声明静态变量B=200
#!/bin/bash
A=100
echo A=\(A (或echo “A=\)A”,这两种写法都输出A=100,而echo \(A则直接输出100)</p><p style="text-align: left;"> readonly B=200</p><p style="text-align: left;"> echo B=\)B
(注意:变量名规范为大写,不能带有系数,不能随意加空格)
将命令的返回值赋给变量
1、A=date,即可将date命令的结果赋给A(必须要加反引号,否则是将文本赋给A)
2、A=\((date) 等价与反引号</p><p style="text-align: left;"><strong></strong><strong></strong></p><p style="text-align: left;"> <strong>基本语法</strong></p><p style="text-align: left;"><strong> </strong>export 变量名=变量值 (将shell变量输出为环境变量或全局变量)</p><p style="text-align: left;"> source 配置文件 (刷新配置文件,让修改后的配置信息立刻生效)</p><p style="text-align: left;"> echo \)变量名 (查询环境变量的值)
多行注释: :<<!
内容
!
当执行一个shell脚本时,如果想要获取到命令行的参数信息,就可以用到位置参数变量。如https://www.bilibili.com/read/cv/myshell.sh 100 200 就是一个执行shell的命令行,可以在myshell脚本中获取参数信息。
基本语法
\(n (n为数字,0代表命令本身,\)1-9代表第1-9个参数,十以上的参数需要用大括号括起,如\({10})</p><p style="text-align: left;"> \)* (*代表命令行中的所有参数,\(*把所有参数看成一个整体)</p><p style="text-align: left;"> \)@ (也代表命令行中所有参数,不过\(@把每个参数区分对待)</p><p style="text-align: left;"> \)# (代表命令行中所有参数的个数)
如编写一个myshell.sh脚本
#!/bin/bash
echo “0=\(0 1=\)1 2=\(2”</p><p style="text-align: left;"> echo “\)*”
echo “\(#”</p><p style="text-align: left;"> 则在命令行中输入https://www.bilibili.com/read/cv/myshell.sh 100 200,显示</p><p style="text-align: left;"> 0=https://www.bilibili.com/read/cv/myshell 1=100 2=200</p><p style="text-align: left;"> 100 200</p><p style="text-align: left;"> 2</p><p style="text-align: left;"><strong></strong><strong></strong></p><p style="text-align: left;"> 预定义变量是shell设计者事先定义好的变量,可以直接在Shell脚本中使用。</p><p style="text-align: left;"> <strong>基本语法</strong></p><p style="text-align: left;"><strong> </strong>\)\( (当前进程的PID)</p><p style="text-align: left;"> \)! (后台运行的最后一个进程的PID)
\(? (最后一次执行命令的返回状态。如变量值为0则上一次命令正确执行,如果不为0则不正确执行)</p><p style="text-align: left;"> </p><p style="text-align: left;"> </p><p style="text-align: left;"> </p><p style="text-align: left;"><strong></strong></p><p style="text-align: left;"> <strong>基本语法</strong></p><p style="text-align: left;"><strong> </strong>“\)((运算式))” 或 “\([运算式]” 或 expr m + n (expression表达式)</p><p style="text-align: left;"> 1、注意expr 运算符间要有空格,用echo输出时需要 `expr m + n` 将结果赋给变量</p><p style="text-align: left;"> 2、expr m – n</p><p style="text-align: left;"> 3、expr * , / , % 乘, 除, 取余</p><p style="text-align: left;"> </p><p style="text-align: left;"><strong></strong></p><p style="text-align: left;"><strong></strong><strong></strong></p><p style="text-align: left;"><strong> </strong>[ condition ] (注意condition首尾有空格,非空返回true,可以用\)?验证,0为true,>1为false)
[ condition ] && echo OK || echo NotOK 表示判断,若为true则执行前面,false相反。&&表示“或”
if为开始,then承接,fi结束
基本语法
if [ 条件判断句 ]
then
代码
fi
多分枝的if判断句
if [ 条件判断句 ]
then
代码
elif [ 条件判断句 ]
then
代码
fi
如:1、判断ok是否等于ok(字符串的比较)
#!/bin/bash
if [ “ok” = “ok” ]
then
echo “equal”
fi
2、判断23是否大于22
#!/bin/bash
if [ 23 -ge 22 ]
then
echo “bigger”
fi
3、判断/root/a.txt是否存在
#!/bin/bash
if [ -f /root/a.txt ]
then
echo “exist”
fi
4、输入参数≥60则输出及格,输入参数<60则输出不及格
#!/bin/bash
if [ \(1 -ge 60 ]</p><p style="text-align: left;"> then</p><p style="text-align: left;"> echo “及格”</p><p style="text-align: left;"> elif [ \)1 -lt 60 ]
then
echo “不及格”
fi
基本语法
case \(变量名 in</p><p style="text-align: left;"> “值1”)</p><p style="text-align: left;"> 程序1</p><p style="text-align: left;"> ;;</p><p style="text-align: left;"> “值2”)</p><p style="text-align: left;"> 程序2</p><p style="text-align: left;"> ;;</p><p style="text-align: left;"> *)</p><p style="text-align: left;"> 程序3</p><p style="text-align: left;"> ;;</p><p style="text-align: left;"> esac</p><p style="text-align: left;">(如果变量值=值1,则执行程序1,值2同理。如果都不等于值1或值2,则执行程序3)</p><p style="text-align: left;"> 如:输入参数1则输出“周一”,输入参数2则输出“周二”,其他值输出“其他”</p><p style="text-align: left;"> #!/bin/bash</p><p style="text-align: left;"> case \)1 in
“1”)
echo “周一”
;;
“2”)
echo “周二”
;;
*)
echo “其他”
;;
esac
基本语法1
for 变量 in 值1 值2 值3…
do
程序

done
语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done
如:1、打印命令行输入的参数
#!/bin/bash
for a in “\(*”</p><p style="text-align: left;"> do</p><p style="text-align: left;"> echo “Num is \)a”
done
(这种情况下,输出的参数会在同一行内。\(*换成\)@则可分别输出,或者去掉双引号)
2、设计一个从1加到n的累加求和程序
#!/bin/bash
SUM=0
for (( i=1; i<=\(1; i++))</p><p style="text-align: left;"> do</p><p style="text-align: left;"> SUM=\)[ \(SUM+\)i ]
done
echo “Sum=\(SUM”</p><p style="text-align: left;"> </p><p style="text-align: left;"> <strong></strong><strong></strong></p><p style="text-align: left;"><strong></strong><strong>基本语法</strong></p><p style="text-align: left;"><strong> </strong>while [ 条件判断式 ]</p><p style="text-align: left;"> do</p><p style="text-align: left;"> 程序</p><p style="text-align: left;"> done</p><p style="text-align: left;"> (注意条件判断式和[]之间有空格)</p><p style="text-align: left;"> 如:设计一个从1加到n的程序</p><p style="text-align: left;"> #!/bin/bash</p><p style="text-align: left;"> SUM=0</p><p style="text-align: left;"> i=0</p><p style="text-align: left;"> while [ \)i -le \(1 ]</p><p style="text-align: left;"> do</p><p style="text-align: left;"> SUM=\)[\(SUM+\)i]
i=\([\)i+1]
done
echo “Sum=\(SUM”</p><p style="text-align: left;"> </p><p style="text-align: left;"><strong></strong><strong></strong></p><p style="text-align: left;"> <strong>基本语法</strong></p><p style="text-align: left;"><strong> </strong>read [选项] 参数</p><p style="text-align: left;"> <strong>常用选项</strong></p><p style="text-align: left;"><strong> </strong>-p 显示提示的内容</p><p style="text-align: left;"> -t 设置等待时间</p><p style="text-align: left;"> 如可以显示十秒内在终端中输入的数值</p><p style="text-align: left;"> #!/bin/bash</p><p style="text-align: left;"> read -t 10 -p “请输入一个数字=” NUM1</p><p style="text-align: left;"> echo “ 你输入的数值= \)NUM1”
四、函数
shell编程语言和其他语言一样,具有系统函数,也可自定义函数。介绍2个系统函数
basename
功能:返回完成路径最后/的部分,常用于获取文件名
基本语法: basename 完整路径 [文件扩展名]
(如果输入扩展名,则输出内容会把扩展名去掉)
如:输入basename /home/test.txt .txt 则输出test
dirname
功能:返回完整路径最前/的部分,常用于返回路径部分。
基本语法:dirname 完整路径
(从给定的绝对路径中去除文件名,并返回路径部分)
如:输入dirname /root/code/a.txt 则输出/root/code
基本语法
function 函数名 [()] {
程序
}
调用该函数则直接写 函数名 [值]
如:计算两个输入的数的和
#!/bin/bash
function getSum() {
SUM=\([\)n1+\(n2]</p><p style="text-align: left;"> echo “和为 \)SUM”
}
read -p “请输入第一个数= ” n1
read -p “请输入第二个数= ” n2
getSum n1 n2

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/175223.html