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)
readonly B=200
echo B=$B
(注意:变量名规范为大写,不能带有系数,不能随意加空格)
将命令的返回值赋给变量
1、A=`date`,即可将date命令的结果赋给A(必须要加反引号,否则是将文本赋给A)
2、A=$(date) 等价与反引号
基本语法
export 变量名=变量值 (将shell变量输出为环境变量或全局变量)
source 配置文件 (刷新配置文件,让修改后的配置信息立刻生效)
echo $变量名 (查询环境变量的值)
多行注释: :<<!
内容
!
当执行一个shell脚本时,如果想要获取到命令行的参数信息,就可以用到位置参数变量。如https://www.bilibili.com/read/cv/myshell.sh 100 200 就是一个执行shell的命令行,可以在myshell脚本中获取参数信息。
基本语法
$n (n为数字,0代表命令本身,$1-9代表第1-9个参数,十以上的参数需要用大括号括起,如${10})
$* (*代表命令行中的所有参数,$*把所有参数看成一个整体)
$@ (也代表命令行中所有参数,不过$@把每个参数区分对待)
$# (代表命令行中所有参数的个数)
如编写一个myshell.sh脚本
#!/bin/bash
echo “0=$0 1=$1 2=$2”
echo “$*”
echo “$#”
则在命令行中输入https://www.bilibili.com/read/cv/myshell.sh 100 200,显示
0=https://www.bilibili.com/read/cv/myshell 1=100 2=200
100 200
2
预定义变量是shell设计者事先定义好的变量,可以直接在Shell脚本中使用。
基本语法
$$ (当前进程的PID)
$! (后台运行的最后一个进程的PID)
$? (最后一次执行命令的返回状态。如变量值为0则上一次命令正确执行,如果不为0则不正确执行)
基本语法
“$((运算式))” 或 “$[运算式]” 或 expr m + n (expression表达式)
1、注意expr 运算符间要有空格,用echo输出时需要 `expr m + n` 将结果赋给变量
2、expr m – n
3、expr * , / , % 乘, 除, 取余
[ 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 ]
then
echo “及格”
elif [ $1 -lt 60 ]
then
echo “不及格”
fi
基本语法
case $变量名 in
“值1”)
程序1
;;
“值2”)
程序2
;;
*)
程序3
;;
esac
(如果变量值=值1,则执行程序1,值2同理。如果都不等于值1或值2,则执行程序3)
如:输入参数1则输出“周一”,输入参数2则输出“周二”,其他值输出“其他”
#!/bin/bash
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 “$*”
do
echo “Num is $a”
done
(这种情况下,输出的参数会在同一行内。$*换成$@则可分别输出,或者去掉双引号)
2、设计一个从1加到n的累加求和程序
#!/bin/bash
SUM=0
for (( i=1; i<=$1; i++))
do
SUM=$[ $SUM+$i ]
done
echo “Sum=$SUM”
基本语法
while [ 条件判断式 ]
do
程序
done
(注意条件判断式和[]之间有空格)
如:设计一个从1加到n的程序
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo “Sum=$SUM”
基本语法
read [选项] 参数
常用选项
-p 显示提示的内容
-t 设置等待时间
如可以显示十秒内在终端中输入的数值
#!/bin/bash
read -t 10 -p “请输入一个数字=” NUM1
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]
echo “和为 $SUM”
}
read -p “请输入第一个数= ” n1
read -p “请输入第二个数= ” n2
getSum n1 n2
到此这篇shell编程基础(shell编程基础linux)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/shellbc/36933.html