Linux基础——脚本

脚本是什么?

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

  • 使用 # 作为注释,文件后缀为.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}"

运行test.sh 并传入2个参数
在这里插入图片描述
示例2——利用 shift 可对传入的参数进行偏移(默认偏移一位),test.sh 代码如下

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

运行 test.sh 并传入4个参数,可看到一开始 $1=one,shift 2后$1=three
在这里插入图片描述

条件判断

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}

运行结果如图
在这里插入图片描述

Linux命令行中的shell脚本是一种用于自动化执行多个命令的脚本语言。它可以通过编写一系列命令和逻辑来实现特定的任务。通常情况下,shell脚本以.sh为文件扩展名。 在Linux中,编写shell脚本可以帮助我们更高效地管理和操作系统。引用提到,shell脚本并不难学习,它可以让我们更好地理解和使用Linux系统中的各种命令和脚本。 例如,引用中提到的挂载软驱和光驱的命令,可以通过在命令行输入"mount /mnt/cdrom"和"mount /mnt/floppy"来挂载光驱和软驱。 另外,引用中提到的kill命令是用于终止后台进程的命令。我们可以使用kill命令向进程发送指定的信号来结束它。kill命令的语法相对简单,可以通过两种方式来使用。 总而言之,Linux命令行中的shell脚本是一种强大的工具,可以帮助我们实现自动化任务和更高效地管理系统。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Linux 命令行——shell 脚本](https://blog.csdn.net/weixin_43621315/article/details/125464093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [linux中shell脚本命令使用详解](https://blog.csdn.net/weixin_51178981/article/details/118162681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值