龙空技术网

5分钟搞懂shell编程

chatgpt深度问答 2023

前言:

此时姐妹们对“shell比较时间大小”都比较注意,大家都需要剖析一些“shell比较时间大小”的相关资讯。那么小编同时在网上网罗了一些对于“shell比较时间大小””的相关知识,希望姐妹们能喜欢,大家快快来学习一下吧!

【写在最前】

我们在平时的编程学习中,或多或少,或早或晚,都要接触到linux服务器;

熟练掌握shell编程技术,是从小白变大牛的必经之路!

通过本文知识,让我们花5分钟时间彻底搞懂shell编程,相信聪明的你,看完一定会有收获!

【正文开始】

什么是shell?

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell 种类有很多,最常用的的是:Bourne Again Shell(即:/bin/bash,基本等同 /bin/sh),它非常易用且完全免费,是大多数Linux 系统默认的 Shell

大家常见的shell脚本的第一行内容是: #!/bin/bash

这一句就是告诉系统需要使用 /bin/bash 脚本解释器来执行。

编写第一个shell脚本实例: vim test.sh

然后输入:

#!/bin/bash

echo "Hello World !"

# 运行 Shell 脚本的两种方法:

1、作为可执行程序

chmod +x ./test.sh #使脚本具有执行权限

./test.sh #直接执行脚本(./不可省略,表示在当前目录查找,否则默认去环境变量PATH里找)

2、作为解释器参数

例1: /bin/sh test.sh

例2: /bin/php test.php

这种方式运行的脚本,不需要在第一行指定解释器信息(写了也没用)

# shell的注释

单行注释: #

多行注释:

<<EOF (不常用)

注释内容...

注释内容...

注释内容...

EOF

# 变量操作

定义:str=abcd

注意: 变量名str和等号之间不能有空格(否则报错:变量名未找到命令),不能有特殊符号(?*),不能以数字开头(可以使用下划线和大写)

使用:${变量名} (大括号虽然是可选的,但是推荐用)(有利于区分边界,防止意外情况)

只读: readonly 变量名 (没有大括号)

删除: unset 变量名 (删除后不能再用,不能删除只读变量)

# 字符串操作

str="abcd"

取长:echo ${#str} # 输出 4

截取: echo ${str:1:5} # 输出 bcd(不会报越界)

拼接:echo ${str}'abc' # 输出 abcabc

查找:echo `expr index "$str" cd` # 输出3(注意必须是反引号)

判空:if test $str # 等价于 if [ $str ]

判等:if test $str = "abcd" # 等价于 if [ $str = "abcd" ]

# 数组操作

共3种定义方式:

1)array_name=(value0 value1 value2 value3)

2)array_name=(

value0

value1

value2

value3

)

3)

array_name[0]=value0

array_name[1]=value1

array_name[n]=valuen

读取数组: valuen=${array_name[n]}

获取数组所有元素:echo ${array_name[@]}

获取数组长度: length=${#array_name[@]}

# 自定义函数的实现

定义:

func1(){

echo "第一个参数为 $1 !"

echo "第二个参数为 $2 !"

}

调用: func1 p1 p2

# 条件的处理

if condition1

then

command1

elif condition2

then

command2

else

commandN

fi

# 循环的处理

1)for的写法

for var in item1 item2 ... itemN

do

...

done

一个例子:

for loop in 1 2 3 4 5

do

echo "The value is: $loop"

done

2)while 的写法

int=1

while(( $int<=5 ))

do

echo $int

let "int++"

done

## 文件测试运算符

操作符 说明 举例

-e 检测文件(包括目录)是否存在

-d 检测文件是否是目录

-r 检测文件是否可读

-w 检测文件是否可写

-x 检测文件是否可执行

-s 检测文件是否为空(文件大小是否大于0),不为空返回 true

-b 检测文件是否是块设备文件,

-c 检测文件是否是字符设备文件

-p 检测文件是否是管道文件

-l 检测文件是否存在并且是一个符号链接。

-f 检测文件是否是普通文件(既不是目录,也不是设备文件)

-g 检测文件是否设置了 SGID 位

-u 检测文件是否设置了 SUID 位

-k 检测文件是否设置了粘着位(Sticky Bit)

-S: 检测某文件是否是 socket。

一个示例:

file="test.sh"

if test -r $file

then

echo "文件可读"

else

echo "文件不可读"

fi

【全文完】

--------------------------------

十年技术沉淀,只做原创文章;

及时关注作者,成就大牛之路!

如果您对文章内容有不同意见或独到见解,欢迎大家在评论区留言讨论,作者也会第一时间进行互动回复。

标签: #shell比较时间大小