Linux基础——脚本

Linux基础——脚本脚本脚本是什么 脚本执行方式例子利用 date 建立文件脚本是什么 脚本是一堆命令的集合 类似于程序 但不需要编译 即可逐行执行从而完成批量工作 具有以下特点 使用 作为注释 文件后缀为 sh 读到 e

大家好,欢迎来到IT知识分享网。

脚本是什么?

脚本是一堆命令的集合,类似于程序,但不需要编译,即可逐行执行从而完成批量工作,具有以下特点:

  • 使用 # 作为注释,文件后缀为.sh
  • 读到 enter 就开始执行该行命令,若需换行应使用 \ 转义enter
  • 执行的脚本文件需要有 rx 权限
  • 命令用 $() 括起来,算术运算用 $(())括起来

脚本执行方式

  • 可使用绝对路径 /home/xxx/xxx.sh 或在相对路径下 ./xxx.sh 执行
  • 可用命令 bash xxx.sh 或 sh xxx.sh 执行
  • 可将脚本文件放在PATH指定的目录或将脚本文件所在目录添加到PATH,然后就可通过文件名直接执行

上述3种方式都会使用一个新的bash环境执行脚本,即该脚本在子程序的bash内执行,故当子程序执行完成后,其内的变量在结束时不会传回给父程序,如下变量name在脚本执行完后就不存在了
在这里插入图片描述

  • 而使用 source xxx.sh 执行脚本,可保留变量

在这里插入图片描述

符号判断

如 test -e filename && echo “exist” || echo “Not exist” 可测试filename是否存在

符号 意义(文件类型)
-e 文件是否存在
-f 是否为文件
-d 是否为目录
-b 是否为block设备(如硬盘)
-c 是否为character设备(如鼠标)
-S 是否为Socket文件
-p 是否为pipe文件
-l 是否为链接文件

如 test -r filename 可测试filename是否可读

符号 意义(文件属性)
-r 是否可读
-w 是否可写
-x 是否可执行
-u 是否有SUID
-g 是否有SGID
-k 是否有Sticky bit
-s 是否为空白文件

如 test file1 -nt file2 可测试file1是否比file2新

符号 意义(文件比较)
-nt 是否更新
-ot 是否更旧
-ef 是否同一文件

如 test n1 -eq n2 可测试n1是否等于n2

符号 意义(数字比较)
-eq 相等
-ne 不等
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

如 test -z string 可测试string是否为空

符号 意义(字符串)
-z 是否为空
-n 是否非空
== / != 是否等于/不等

如 test -n str1 -a -n str2 可测试str1和str2是否为空

符号 意义(多重条件)
-a
-o
!

符号 []

利用 [] 可实现与test一样的效果,但在其内的表达式两端需要有空白字符分隔,如

 [ "song" == "son" ] && echo "equal" || echo "not equal" [ -e "temp" ] && echo "exist" || echo "Not exist" 

此外,[] 中的变量需要用””括起来,否则对于如下判断会变成 song zai == “song” 报错
在这里插入图片描述
故正确的方式为 [ “${name}”==“song” ]

脚本的参数及偏移

在运行脚本文件 xxx.sh 时可在其后面加上参数,$0代表当前脚本文件名,$1$2…后即为传入的参数,此外还有一些特别参数

符号 意义
$# 表示传入参数的个数
$@ 表示所有传入的参数(用空白分割)

示例1——test.sh 代码如下

echo "File name = ${0}" echo "Parameter number = $#" echo "Parameter = $@" echo "1st parameter = ${1}" 
echo "Parameter number = $#" echo "Parameters = $@" echo "1st parameter = ${1}" shift 2 echo "1st parameter = ${1}" 

条件判断

if

  • 先判断条件1,当条件1成立时执行命令1
  • 条件1不成立,然后判断条件2,当条件2成立时执行命令2
  • 若全部条件都不成立,执行命令3
if [ condition1 ]; then command1 elif [ condition2 ]; then command2 ... else command3 fi 

case

  • 先判断变量var是否等于str1,若等于执行命令1
  • 若不等于,然后判断变量var是否等于str2,若等于执行命令2
  • 若全部str都不等于,执行命令3
case $var in "str1") command1 ;; "str2") command2 ;; ... *) command3 ;; esac 

循环判断

while

while当条件成立时进入循环,直到条件不成立才退出循环

while [ conditiion ] do command done 

until

until 当条件成立时才终止循环,否则进入循环

until [ conditiion ] do command done 

for

  • 第一次循环时,var=str1,执行命令
  • 第二次循环时,var=str2,执行命令…
for var in str1 str2... do command done 

下面的for和大多数程序语言一样

for ((initial;condition;step)) do command done 

示例——for.sh代码如下,连续打印1-5,seq代表后面的两个数值是一直连续的,此外还可用{1. .5}

for num in $(seq 1 5) do echo ${num} done 

函数

函数可整合相同的命令,以减少代码的冗余

function methodname(){ command } 

func.sh代码如下,print()函数的${1}来自调用时传递的参数

function print(){ echo "your input is ${1}" } read -p "input num:" num num=$((${num}%2)) case ${num} in "0") print odd ;; "1") print even ;; *) print illegal ;; esac 

Debug

命令 sh 不仅可用于执行脚本文件,还可用于debug,-n不执行脚本仅查询语法错误,-v执行前先将脚本内容输出到屏幕,-x将执行过程显示到屏幕
在这里插入图片描述

例子

利用date建立文件

先利用read读取输入,判断输入是否为空,生成变量并创建文件

read -p "Please input your filename: " input filename=${input:-"noinput"} date=$(date +%Y%m%d) file=${filename}${date} touch ${file} 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/111962.html

(0)
上一篇 2026-01-21 17:10
下一篇 2026-01-21 17:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信