shell脚本简介+编写

这篇具有很好参考价值的文章主要介绍了shell脚本简介+编写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


1、常用Linux命令
2、Linux下脚本编写
3、windows下CMD常用命令



一、变量

1、系统预定义变量

常用系统变量

$HOME$PWD$SHELL$USER$PATH等。

[root@VM-0-9-centos ~]# echo $HOME
/root
[root@VM-0-9-centos ~]# 

显示当前所有Shell变量:set

[root@VM-0-9-centos ~]# set
BASH=/bin/bash
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()

2、自定义变量

基本语法

  • 定义变量:变量名=变量值
  • 撤销变量:unset 变量名
  • 声明静态变量:readonly变量,注意:不能unset
# 定义变量
A=5
#	撤销变量
unset A
#	静态变量
readonly B=3

静态变量,不能unset

[root@VM-0-9-centos ~]# readonly B=2
[root@VM-0-9-centos ~]# unset B
-bash: unset: B: cannot unset: readonly variable

静态变量,不能重新赋值

[root@VM-0-9-centos ~]# readonly C=3
[root@VM-0-9-centos ~]# echo $C
3
[root@VM-0-9-centos ~]# C=4
-bash: C: readonly variable
[root@VM-0-9-centos ~]# echo $C
3
[root@VM-0-9-centos ~]# 

变量默认为字符串,无法进行数值计算

[root@VM-0-9-centos ~]# D=1+2
[root@VM-0-9-centos ~]# echo $D
1+2
[root@VM-0-9-centos ~]# 

有空格,需要使用双引号或单引号括起来

D="I love banzhang"

全局变量

export 变量名
export E=3

3、特殊变量: n 、 n、 n、#、 ∗ 、 *、 ∗、@、$?

1. $n

$n(功能描述:n为数字,$0代表该脚本名称,$1- 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})

新建脚本parameter.sh

#!/bin/bash
echo '==========$n=========='
echo $0	# 文件名
echo $1 # 第1个入参
echo $2 # 第2个入参

执行脚本,并传入参数

[root@VM-0-9-centos ~]# ./parameter.sh 1 2 3 4
==========$n==========
./parameter.sh
1
2
[root@VM-0-9-centos ~]# 

2. $#

$#:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性。

echo '==========$#=========='
echo $#

输入参数

[root@VM-0-9-centos ~]# ./parameter.sh a b c d e f 
==========$#==========
6
[root@VM-0-9-centos ~]# 

3. ∗ 、 *、 @

$*:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体

$@:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待

echo '==========$*=========='
echo $*
echo '==========$@=========='
echo $@

输入参数

[root@VM-0-9-centos ~]# ./parameter.sh a b c d e f 
==========$*==========
a b c d e f
==========$@==========
a b c d e f
[root@VM-0-9-centos ~]# 

4. $?

$?

最后一次执行的命令的返回状态。

如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了

[root@VM-0-9-centos ~]# echo "hello"
hello
[root@VM-0-9-centos ~]# echo $?
0
[root@VM-0-9-centos ~]# 

二、运算符

基本语法

$((运算式))” 或 “$[运算式]
[root@VM-0-9-centos ~]# echo $[(2+3)*4]
20
[root@VM-0-9-centos ~]# 

三、条件判断

1、两个整数之间比较

  • -eq:等于(equal)
  • -ne:不等于(not equal)
  • -lt:小于(less than)
  • -le:小于等于(less equal)
  • -gt:大于(greater than)
  • -ge:大于等于(greater equal)
#	判断23是否大于10
[root@VM-0-9-centos ~]# [ 23 -ge 10 ]
[root@VM-0-9-centos ~]# echo $?
0
[root@VM-0-9-centos ~]# 

2、文件权限判断

  • -r:有读的权限(read)
  • -w:有写的权限(write)
  • -x:有执行的权限(execute
#	判断是否有写权限(主要用空格间隔)
[root@VM-0-9-centos ~]# [ -w nohup.out ]
[root@VM-0-9-centos ~]# echo $?
0
[root@VM-0-9-centos ~]# 

3、文件类型判断

  • -e:文件存在(existence)
  • -f:文件存在并且是一个常规的文件(file)
  • -d:文件存在并且是一个目录(directory)
#	查询文件是否存在
[root@VM-0-9-centos ~]# [ -e /root/nohup.out ]
[root@VM-0-9-centos ~]# echo $?
0
[root@VM-0-9-centos ~]# 

4、多条件判断

&&:表示前一条命令执行成功时,才执行后一条命令

||:表示上一条命令执行失败后,才执行下一条命令

# 执行成功
[root@VM-0-9-centos ~]# [ atguigu ] && echo OK || echo notOK
OK
#	执行失败
[root@VM-0-9-centos ~]# [ ] && echo OK || echo notOK
notOK

四、流程控制

1、if 判断

注意事项:

  • [ 条件判断式 ],中括号和条件判断式之间必须有空格。

  • if后要有空格。

语法:单分支

#	格式一
if [ 条件判断 ]; then
	程序
fi

# 格式二
if [条件判断]
then
	程序
fi

语法:多分支

if [ 条件判断式 ]
then 
	程序
elif [ 条件判断式 ]
then 
	程序
else
	程序
fi

案例:

#! /bin/bash
if [ $1 -eq 1 ]
then
        echo "条件一"
elif [ $1 -eq 2 ]
then
        echo "条件二"
fi

执行

[root@VM-0-9-centos shell]# sh ./if.sh 1
条件一
[root@VM-0-9-centos shell]# sh ./if.sh 2
条件二
[root@VM-0-9-centos shell]# 

2、case 语句

注意事项:

  • case行尾必须为单词in,每一个模式匹配必须以右括号结束。
  • 双分号;;表示命令序列结束,相当于java中的break
  • 最后的*)表示默认模式,相当于java中的default

基本语法:

case $ 变量名 in
"值1")
	如果变量=1,则执行程序1
;;
"值2")
	如果变量=2,则执行程序2
;;
*)
如果都不符合以上,则执行此程序
;;
esac

案例

#! /bin/bash
case $1 in
"1")
        echo "变量一"
;;
"2")
        echo "变量二"
;;
*)
        echo "其它"
;;
esac

执行

[root@VM-0-9-centos shell]# sh case.sh 1
变量一
[root@VM-0-9-centos shell]# sh case.sh 2
变量二
[root@VM-0-9-centos shell]# sh case.sh 3
其它
[root@VM-0-9-centos shell]# 

3、for 循环

1. 基本语法—1

for ((初始值;循环控制变量;变量变化))
do 
	程序
done

案例

#! /bin/bash
  
sum=0
for((i=0;i<=100;i++))
do
        sum=$[$sum+$i]
done
echo $sum

执行

[root@VM-0-9-centos shell]# sh ./for1.sh 
5050
[root@VM-0-9-centos shell]# 

2. 基本语法—2

for 变量 in 值1 值2 值3...
do 
	程序
done

案例

#! /bin/bash
# 打印数字

for i in 变量1 变量2 变量3
do
        echo "ban zhang : $i"
done

执行

[root@VM-0-9-centos shell]# sh ./for2.sh 
ban zhang : 变量1
ban zhang : 变量2
ban zhang : 变量3
[root@VM-0-9-centos shell]# 

案例—比较加""区别

#! /bin/bash
echo '======================$*======================'
for i in $*
do
        echo "one: $i"
done

echo '======================$@======================'
for j in $@
do
        echo "two $j"
done

# 加"",则$*会看成1个整体。
echo '===================$*+ ""====================='
for ii in "$*"
do
        echo "one: $ii"
done

# 加"",会将参数分开执行。
echo '===================$@+ ""====================='
for jj in "$@"
do
        echo "two $jj"
done

执行

[root@VM-0-9-centos shell]# sh ./for3.sh cls mly wls
======================$*======================
one: cls
one: mly
one: wls
======================$@======================
two cls
two mly
two wls
===================$*+ ""=====================
one: cls mly wls
===================$@+ ""=====================
two cls
two mly
two wls
[root@VM-0-9-centos shell]# 

4、while循环

语法

while [ 条件判断式 ]
do
	程序
done

案例

#! /bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
        sum=$[ $sum+$i ]
        i=$[ $i+1 ]
done
echo $sum

执行

[root@VM-0-9-centos shell]# sh ./while.sh 
5050
[root@VM-0-9-centos shell]#

五、read读取控制台输入

语法

read  (选项)  (参数)
①选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)如果-t不加表示一直等待
②参数
	变量:指定读取值的变量名

案例:

#! /bin/bash
read -t 7 -p "Enter your name:" NN
echo $NN

执行

[root@VM-0-9-centos shell]# sh ./read.sh 
Enter your name:Mytest
Mytest
[root@VM-0-9-centos shell]# 

六、函数

1、系统函数

1.1 basename

语法:

输出最后一个/之后内容

suffix:去除内容

basename [string / pathname] [suffix]

案例

[root@VM-0-9-centos ~]# basename /data/test/my.txt
my.txt
[root@VM-0-9-centos ~]# basename /data/test/my.txt .txt
my
[root@VM-0-9-centos ~]# basename /data/test/my.txt xt
my.t
[root@VM-0-9-centos ~]# 
1.2 dirname

取文件绝对路径

从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

[root@VM-0-9-centos ~]# dirname /data/test/my.txt
/data/test
[root@VM-0-9-centos ~]#

2、自定义函数

  • 必须在调用函数地方之前,先声明函数。
  • 函数返回值:通过$?系统变量获得。
  • 未指定返回值,则以最后1条执行为准。
  • 制定返回值:return
[ function ] funname[()]
{
	Action;
	[return int;]
}

案例

#! /bin/bash
function sum()
{
        s=0
        s=$[$1+$2]
        echo "$s"
#	自定义函数返回值
return 5;
}
# 调用sum函数
sum  1 2;

执行

[root@VM-0-9-centos shell]# sh ./fun.sh 
3
[root@VM-0-9-centos shell]# echo $?
5
[root@VM-0-9-centos shell]# 

七、匹配正则

在Linux中,grep,sed,awk等命令都支持通过正则表达式进行模式匹配。

cat /etc/passwd |grep r..t

shell脚本项目,Linux,linux,bash,运维,shell,脚本文章来源地址https://www.toymoban.com/news/detail-782965.html

八、案例

1、jar包启动脚本

#!/bin/bash
# 指定启动环境
ENV=prod
nohup /et/profile/jdk-1.8/java -jar -Xms8g -Xmx8g -Dfile.encoding=utf-8 demo-start-jar.jar  --spring.profiles.active=$ENV >> nohup.out 2>&1 &
  • nohup .... &:后台,不挂断地运行命令。
  • -Xms8g :堆最小内存
  • -Xmx8g:堆最大内存
  • -Dfile.encoding=utf-8
  • --spring.profiles.active=$ENV
  • 2>&1:错误输出2重定向到标准输出1。
Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
0——标准输入(stdin)
1——标准输出(stdout)
2——标准错误(stderr)

到了这里,关于shell脚本简介+编写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(64)
  • Linux shell编程学习笔记14:编写和运行第一个shell脚本hello world!

     * 20231020 写这篇博文断断续续花了好几天,为了说明不同shell在执行同一脚本文件时的差别,我分别在csdn提供线上Linux环境 (使用的shell是zsh)和自己的电脑上(使用的shell是bash)做测试。功夫不负有心人,在其中一些实例中可以体现出zsh和bash的对脚本文件支持的差别,收

    2024年02月07日
    浏览(54)
  • shell脚本简介+编写

    1、常用Linux命令 2、Linux下脚本编写 3、windows下CMD常用命令 1、系统预定义变量 常用系统变量 $HOME 、 $PWD 、 $SHELL 、 $USER 、 $PATH 等。 显示当前所有 Shell 变量: set 2、自定义变量 基本语法 定义变量:变量名=变量值 撤销变量:unset 变量名 声明静态变量:readonly变量,注意:不

    2024年02月02日
    浏览(39)
  • C语言,Linux,静态库编写方法,makefile与shell脚本的关系。

    静态库编写: 编写.o文件 gcc -c( 小写) seqlist.c(需要和头文件、main.c文件在同一文件目录下) libs.a- 去掉lib与.a剩下的为库的名称‘s’。 -ls 是指库名为s。 -L 库的路径。 makefile文件编写: 这个是编译后的文件,app文件为编译后的二进制文件。      makefile与shell脚本关系 shell 脚

    2024年02月12日
    浏览(35)
  • 【Linux】进程实践项目 —— 自主shell编写

    送给大家一句话: 不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。 —— 宫崎骏《千与千寻》 前几篇文章,我们学习进程的相关知识: 进程概念,进程替换,进程控制 。熟悉了进程到底是个什么事情,接下来我们来做一个实践,来

    2024年04月14日
    浏览(45)
  • Linux【脚本 05】交互式shell脚本编写及问题处理([: ==: unary operator expected)[: ==: 期待一元表达式

    之前写了Windows的cmd脚本用来保存报告文件: 但是有时候服务仅在Linux环境上进行部署,所以要写一个shell脚本进行报告的保存。 2.1 初始版本 简单的参数判断,这里只给出一个分支,脚本save.sh内容如下: 此时如果执行脚本时没有携带参数,将会报错: 这个脚本的问题很多

    2024年02月09日
    浏览(46)
  • Linux Git打包部署JAVA项目 shell脚本

    脚本的名字前缀就是jar名

    2024年01月17日
    浏览(37)
  • Linux shell编程学习笔记44:编写一个脚本,将md5sum命令执行结果保存到变量中,进而比较两个文件内容是否相同

    在  Linux shell编程学习笔记42:md5sum https://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501 中,我们提到编写一个在Linux系统下比较两个文件内容是否相同的脚本。 基本思路是: 其中有两个难点: 1.文件的md5值的获取 2.md5值的比较 对于第1个难点,我们的解决办法是

    2024年04月10日
    浏览(72)
  • 【Linux | Shell】bash shell 基础命令

    很多 Linux 发行版的默认 shell 是 GNU bash shell。本文将介绍 bash shell 的基本特性,比如 bash 手册、命令行补全以及如何显示文件内容等。 GNU bash shell 是一个程序,提供了对 Linux 系统的交互式访问。它是作为普通程序运行的,通常是在用户登录终端时启动。系统启动的 shell 程序

    2024年02月11日
    浏览(60)
  • Linux之shell编程(BASH)

    Kernel Linux内核主要是为了和硬件打交道 Shell 命令解释器(command interperter) Shell是一个用C语言编写的程序,他是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。 Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核

    2024年01月18日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包