一、shell脚本基本介绍
格式要求
- 脚本要以 #!/bin/bash 开头,debain需要改成#!/bin/dash
- 脚本需要有可执行权限
shell常用执行方式
- 输入脚本的绝对路径或相对路径(该方式首先要赋予脚本执行权限)
- sh+脚本 不用执行赋予脚本执行权限也可以执行
-
!/bin/bash 开头的需要 bash+脚本
二、shell的变量
变量介绍
- Linux Shell中变量分为:系统变量和用户自定义变量
- 显示当前shell中所有变量:set
变量定义
- 定义变量:变量名=值
- 撤销变量:unset 变量
- 声明静态变量:readonly 变量 ,静态变量不能unset
- 变量命名规则:
- 变量可以由字母、数字和下划线组成,但不能以数字开头
- 等号两侧不能有空格
- 变量名称一般习惯为大写(shell编写的一个规范)
- shell注释规则
#!/bin/bash
单行注释
内容
多行注释
:<</p>
<pre><code>
## 设置环境变量
1. export 变量名=变量值 将shell变量输出为环境变量/全局变量
2. source 配置文件 将修改后的配置信息立即生效
## 位置参数变量
### 介绍
当我们执行一个shell脚本时希望获取命令行参数信息时,可以用到位置参数变量
如:./123.sh 111 222,这就是一个执行shell的命令,123.sh就可以使用位置参数变量获取到参数信息
### 基本语法
*
$n (功能描述:n为数字,$0代表命令本身,$1-\(9代表第1-9个参数,10以后的参数需要用大括号包裹起来例如:\){100})
*
$* (功能描述:该变量代表命令行中所有参数)
*
$@ (功能描述:该变量也代表命令行所有参数,\(@与\)*不同的是前者吧每个参数区别对待,后者是看成一个整体)
*
$# (功能描述:变量代表命令行中所有参数的个数)
### 预定义变量
介绍:shell设计之初就已经定义好的变量,可以直接使用
基本语法
* $$当前进程的进程号
* $!后台运行的最后一个进程的进程号
* $?最后一次执行的命令的返回状态,如果为零者上一个命令正确执行,非零则上一次命令执行不正确
shell要在后台方式运行一个脚本:脚本名称 &
</code></pre>
<h1>!/bin/bash</h1>
<h1>以后台方式运行123.sh</h1>
<p>/home/kali/123.sh &</p>
<pre><code>
三、运算符
1. \(((运算式))或\)[运算式]或者expr m + n
2. expr运算符之间要有空格,如果希望将expr的结果赋给某个变量需要使用
3. expr 的乘,除,取余:* /%
</code></pre>
<h1>!/bin/bash</h1>
<h1>案例1:计算(2+3)*4</h1>
<h1>第一种</h1>
<p>R1=$(((2+3)*4))</p>
<h1>第二种</h1>
<p>R2=$[(2+3)*4]</p>
<h1>第三种</h1>
<p>T=<code>expr 2 + 3</code>
R3=<code>expr $T \* 4</code></p>
<pre><code>
四、条件判断
## 基本语法:
[ condition ]
注:条件前后需要有空格
非空返回ture
## 判断语句
1. = 字符串比较
2. 两个整数的比较
- -lt 小于
- -le 小于等于
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不等于
3. 按照文件权限进行判断
- -r 有读的权限
- -w 有写的权限
- -x 有执行的权限
4. 按照文件类型进行判断
- -f 文件存在并且是一个常规文件
- -e 文件存在
- -d 文件存在并是一个目录
五、流程判断
## 1.if判断
基本语法
</code></pre>
<h1>!/bin/dash</h1>
<p>if[ 条件判断式 ]
then
代码
elif[ 条件判断式 ]
then
代码
fi</p>
<pre><code>
注意事项:[ 条件判断 ] 中括号和条件判断式之间必须有括号
应用案例
</code></pre>
<h1>!/bin/dash</h1>
<p>if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
执行命令 bash xxx.sh</p>
<pre><code>
## 2.case语句
基本语法
</code></pre>
<p>case $变量 in
"值1")
程序1 #如果变量的值等于值1,则执行程序1
;;
"值2")
程序2 #如果变量的值等于值2,则执行程序2
;;</p>
<h1>省略其他分支</h1>
<p>*)
如果变量的值都不是以上的值,则执行此程序
;;
esac</p>
<pre><code>
案例:
</code></pre>
<h1>!/bin/dash</h1>
<p>case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
"3")
echo "周三"
;;
"4")
echo "周四"
;;
"5")
echo "周五"
;;
*)
echo "该放假了"
;;
esac</p>
<pre><code>
## 3.for循环
基本语法
</code></pre>
<h1>!/bin/dash、</h1>
<p>for (( 初始值; 循环控制条件; 变量变化))
do
程序
done</p>
<pre><code>
案例:遍历数组
</code></pre>
<h1>!/bin/dash</h1>
<p>a=(10 20 30 40)
for (( i=0; i<4; i++)) do echo ${a[i]} done < code><!--4;--></p>
<pre><code>
shell中数组用括号包围,数和数之间用空格间隔
## 4.while循环
基本语法
</code></pre>
<h1>!/bin/dash</h1>
<p>while [ 条件判断式 ]
do
程序
done</p>
<h1>注:while与[]符号之间需要有空格分割</h1>
<pre><code>
案例:从命令行输入一个num,计算从1加到num是多少
</code></pre>
<h1>!/bin/dash</h1>
<p>SUN=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo $SUM</p>
<pre><code>
六、read读取控制台输入
基本语法:read 【选项】 【参数】
选项:
* -p指定读取值时的提示符
* -t指定读取值时等待的时间(秒)
参数:指定读取值的变量名
案例:读取控制台输入值并输出输入值的平方
</code></pre>
<h1>!/bin/dash</h1>
<p>read -p "请输入一个数num=" NUM
NUM1=$[$NUM*$NUM]
echo "num的平方=$NUM1"</p>
<pre><code>
七、函数
## 1.系统函数
### basename 函数
语法:basename 【文件路径】 【后缀】
功能:返回完整路径最后/的部分,常用于获取文件名字
后缀:若后缀被指定,将会去除相应后缀
案例:
![shell脚本](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2643789-20221002163823263-1617142898.png)
### dirname函数
语法:dirname 【文件绝对路径】
功能:返回完整路径最后/的前面的部分,常用于返回路径部分
案例:
![shell脚本](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2643789-20221002163838787-1931997577.png)
## 2.自定义函数
基本语法
</code></pre>
<p>function 函数名 (){
程序代码
}</p>
<pre><code>
调用时直接写函数名称
案例:计算输入的两个参数的和
</code></pre>
<h1>!/bin/dash</h1>
<p>function getSum(){
SUM=$[$n1+$n2]
echo "和是=$SUM"
}
read -p "n1=" n1
read -p "n2=" n2
getSum $n1 $n2
如果对你帮助,请点点推荐
Original: https://www.cnblogs.com/Nuy0ah/p/16748998.html
Author: Nuy0ah
Title: shell脚本
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573824/
转载文章受原作者版权保护。转载请注明原作者出处!