【Linux】脚本shell script

shell是与Linux交互的基本工具

shell script是针对shell所写的脚本,解释执行,无需编译

注意事项

  1. 指令的执行是从上而下、从左而右的分析与执行; 
  2. 指令、选项与参数间的多个空白都会被忽略掉; 
  3. 空白行也将被忽略掉,并且[tab]按键的空白同样视为空格键; 
  4. 如果读取到一个Enter符号(CR),就尝试开始执行该行(或该串)命令; 
  5. 如果一行的内容太多,则可以使用[Enter]]来延伸至下一行; 
  6. [#]可做为注释!任何加在#后面的资料将全部被视为批注文字而被忽略!

执行

必须要具备可读可执行权限

直接命令执行

sudo chmod u+x test.sh
./test.sh

bash程序执行

shell名称 脚本名

将输入重定向到shell脚本

bash < 脚本名

内容

echo [-n -e]

-n:输出后不换行

-e:转义字符

#! /bin/bash
# author
# date: 2024-4-26
# function: the first sctipt

echo "current time"
date
echo -n "env path:"$PATH
echo "current user name:`hzy`" 
echo "current work path:"
pwd

exit 0

内嵌脚本

#! /bin/bash
# author
# date: 2024-4-26
# function: the first sctipt

echo "test:"
. test.sh

exit 0

调试

bash -v 脚本名

绝对路径

相对路径

变量path功能

重定向输入:bash < 脚本名

变量

变量就是以一组文字或符号等,来替代一些设置或者是一串保留的数据Shell编程中变量是非类型性质的,不必指定变量是数字还是字符串都需要事先声明

局部变量

局部变量在脚本或命令中定义,仅在当前shel实例中有效,其他shel启动的程序不能访问局部变量。

环境变量

所有的程序,包括shel1启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行,必要的时候shel脚本也可以定义环境变量。(是系统的一部分,无需定义,如PATH)

内部变量

是由shell程序设置的特殊变量,在程序内这些变量无法修改($#、?)。 

$0:当前脚本名称

$n:传递给脚本或函数的参数,n表示第n个参数(下标从1开始)

$#:传递给脚本或函数的参数个数

$*:传递给脚本或函数的全部参数,把所有参数作为一个整体

$@:传递给脚本或函数的全部参数,把所有参数分开,分别传递

$?:上一个命令的退出状态,或者函数的返回值

$$:当前Shell进行的ID,对于脚本,就是脚本所在进程ID

变量赋值

w:=3

变量值读取

read [-ptn] variable1 variable2 variable3:将用户输入的数据分配给变量。

-p:提示用户输入数据,并在读取数据之前显示提示信息。

-t:设置超时时间,如果用户在指定的时间内没有输入数据,则返回失败。

-n:限制读取的字符数,只读取指定数量的字符。

例如

#!/bin/bash

echo "请输入三个变量的值:"
read -p "variable1: " var1
read -p "variable2: " var2
read -p "variable3: " var3

echo "您输入的变量值如下:"
echo "variable1: $var1"
echo "variable2: $var2"
echo "variable3: $var3"

替换变量

new_var=${old_var-content}:如果old_var不存在,content赋值给new_var

new_var=${old_var:-content}:为空也替换

new_var=${old_var:+content}:如果old_var是非空,content就赋值给new_var(与-号相反)

new_var=${old_var:?content}:如果old_var被删除或为空,将content输出到控制台

${w1:+${w3:=root}}表示如果变量$w1被定义且非空(即不为null或空字符串),则执行${w3:=root},否则返回null。

${w3:=root}表示如果变量$w3未被定义或为空,则将其赋值为字符串"root",否则保持其当前值不变

数组

bash只支持一维数组,没有限制大小。

下标由0开始。

数组名=(v1 v2 ... v3)(括号表示数组用空格分开)

单独定义:array[9]=0,无需定义数组,直接执行,除了已经定义的元素,其他为空(类似与字典,或者python的Counter())

读取数组:${array[1]},${array[*]}(数组所有元素),${array[@]}(数组所有元素),加#读取个数

表达式

只支持整数运算

算术运算符

expr 5 + 3#有空格

val=`expr 5 + 3`#有空格

val=$(expr 5 + 3)#有空格

val=$[5+2]#无空格

n=1
m=2
let val=$n+$m#无空格

var=$((运算内容))#var=$((9+8))

关系运算符(逻辑表达式)

test 条件:判断

-eq:是否相等

-ne:不等

-gt:大于

-lt:小于

-ge:大于等于

-le:小于等于

test "abc"=="xyz"

[ "abc" == "xyz" ]#要空格
[ "abc" -eq "xyz" ]#要空格

布尔运算符

逻辑表达式

cmd1 && cmd2:与运算

cmd1 || cmd2:或运算

[逻辑表达式1 -a 逻辑表达式2]

-a:与运算

-o:或运算

!:非运算

返回0是true,false为非零值

字符串运算符

test -z string:是否为空

test -n string:是否为0

test string1=string2:是否相等

test string1!=string2:是否不等

test string:是否为空

文件测试运算符

-e:文件是否存在

-f:文件是否存在且为普通文件

-d:文件是否存在且为目录

-r:是否存在且可读

-w:是否存在且可写

-x:是否存在且可执行

语句

if-then

if [condition]; then
    当条件成立时执行内容
fi#结束判断

if [condition1]; then
    当条件成立1时执行内容
elif [condition2];then
    当条件成立2时执行内容
else
    当条件不成立时执行内容
fi

while

不满足条件,循环结束

while [condition]
do
    执行内容
done

until

满足条件,循环结束,与while相反

until [condition]
do
    执行内容
done

for

for val in arr
do
    执行内容
done

break

continue

exit

函数

函数可以在Shell脚本中做出一个类似自定义执行命令的东西
函数的设置一定要在程序的最前面
不但可以简化程序代码,还可以做成类似“模块”的东西
函数也是有内部变量的,函数名称为$0,后续参数为$1,$2...

[function] name()
{

return
}

#调用
name val1 val2 val3 ... valN

#例子
#!/bin/bash

# 定义一个函数,用于计算两个数的和
function add() {
    local num1=$1
    local num2=$2
    local sum=$((num1 + num2))
    echo "两数之和为: $sum"
}

# 调用函数
add 3 5

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岩塘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值