简单shell脚本的编写

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

shell脚本就是将命令写入文本中,文本可以被执行。

脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译)

shell 既是应用程序,又是一种脚本语言(应用程序 解析 脚本语言)。

简单使用

$0 表示当前脚本的名称
$* 表示脚本的所有参数
$# 表示脚本的参数的个数
$? 程序执行完后的结果,返回值0表示执行成功

$n 表示脚本的第n个参数,n=1,2,3,4,5…9

#!bin/bash
echo "当前脚本的名称为$O"

双引号会解释变量

单引号会把变量当成字符串表示

没有给这个脚本赋予可执行权限就用bash来执行该脚本

简单shell脚本的编写,Linux,shell,linux

#!bin/bash
echo "当前脚本的名称为$O"
echo "总共有$#个参数,分别是$*"

简单shell脚本的编写,Linux,shell,linux

#!bin/bash
echo "当前脚本的名称为$O"
echo "总共有$#个参数,分别是$*"
echo "第一个参数是$1,第三个参数是$3"

简单shell脚本的编写,Linux,shell,linux

shell脚本参数判断

  • 1、文件测试语句
    • -d 测试文件是否是目录类型
      • 是目录返回0,不是目录返回非0
    • -e 测试文件是否存在
    • -f 判断是否为一般文件
    • -r 判断当前用户对该文件是否有==读取==权限
    • -w 判断当前用户对该文件是否有==写入==权限
    • -x 判断当前用户对该文件是否有==执行==权限
  • 2、逻辑测试语句
  • 3、整数值测试语句
  • 4、字符串比较语句

判断/etc/passwd是否为目录

┌──(kali💋kali)-[~/Desktop]
└─$ [ -d  /etc/passwd ]
                                                                            
┌──(kali💋kali)-[~/Desktop]
└─$ echo $?                                                             11
#  $?表示上一步的结果,用echo 输出  

返回值为1,表示/etc/passwd不是目录

┌──(kali💋kali)-[~/Desktop]
└─$ ls
demo.sh  zs
                                                                            
┌──(kali💋kali)-[~/Desktop]
└─$ [ -d  zs ]    
                                                                            
┌──(kali💋kali)-[~/Desktop]
└─$ echo $?
0                                                                        

简单shell脚本的编写,Linux,shell,linux

┌──(kali💋kali)-[~/Desktop]
└─$ [ -d  demo.sh ]
                                                                            
┌──(kali💋kali)-[~/Desktop]
└─$ echo $?                                                             11

简单shell脚本的编写,Linux,shell,linux

一条命令完成上述命令 &&

&& 必须保证两边都为真,条件才会成立,有一边为假条件都不会成立

┌──(kali💋kali)-[~/Desktop]
└─$ [ -f  /etc/passwd ] && echo "该/etc/passwd是文件"                  
该/etc/passwd是文件      


# [ -f  /etc/passwd ]  为真,确实是文件,
# 则执行后面的echo语句

简单shell脚本的编写,Linux,shell,linux

┌──(kali💋kali)-[~/Desktop]
└─$ [  $USER=kali ] && echo "该用户是kali用户"
该用户是kali用户
                   

简单shell脚本的编写,Linux,shell,linux

|| 两边有一个为真就为真,两边都为真也为真

┌──(kali💋kali)-[~/Desktop]
└─$ [ $USER=kali ] ||   echo "该用户是kali用户"                                     

! 表示取反

┌──(kali💋kali)-[~/Desktop]
└─$ [ ! $USER=kali ] ||   echo "该用户是kali用户"
该用户是kali用户

要求普通用户输出user,管理员用户输出superuser

[ ! $USER = kali ] &&  echo "superuser" || echo "user"

简单shell脚本的编写,Linux,shell,linux

整数的比较运算符

-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 等于或小于
-ge 等于或大于
┌──(kali💋kali)-[~/Desktop]
└─$ [ 9 -gt 9 ]                                           
                                                               
┌──(kali💋kali)-[~/Desktop]
└─$ echo $?                                                
1

简单shell脚本的编写,Linux,shell,linux

字符串的比较运算

= 比较字符串内容是否相同
!= 比较字符串内容是否为空
-z 判断字符串内容是否为空

简单shell脚本的编写,Linux,shell,linux

简单shell脚本的编写,Linux,shell,linux

┌──(kali💋kali)-[~/Desktop]
└─$ [ $LANG = "en_US.UTF-8" ] && echo "支持英文" || echo "支持中文"
支持英文 

简单shell脚本的编写,Linux,shell,linux

shell脚本流程控制

if 条件
then 命令
else 命令
fi

if…

#!/bin/bash
DIR="/home/kali/Desktop/demo"
if [ ! -e $DIR]
then 	
	mkdir -p $DIR
fi

if…else…

#!/bin/bash
ping -c 3 -i 0.2 -w 3 $1 &>/dev/null

if [ $? -eq 0 ]
then 
	echo "该$1是正常的"
else
	echo "该$1是不正常的"
fi

简单shell脚本的编写,Linux,shell,linux

if…else…多级嵌套

#!/bin/ash
if [ -z $1  ]
then 
	echo "作者:zs"
	echo "该命令是检测服务器IP是否正常"
	echo "直接在命令后面加参数IP就可以执行"
else
	ping -c 3 -i 0.2 -w 3 $1 &>/dev/null

	if [ $? -eq 0 ]
	then 
		echo "该$1是正常的"
	else
		echo "该$1是不正常的"
	fi

fi

if…elif…else

read -p "请输入分数 [1--100]:" score
if [ $score -ge 85 ] && [ $score -le 100 ] ;then
	echo "优秀"
elif [ $score -ge 70 ] && [ $score -le 84 ] ;then
	echo "合格"
else
	echo "不合格"
fi

简单shell脚本的编写,Linux,shell,linux

shell脚本循环

for循环
for 变量名 in 取值列表
do
 命令序列
done
批量添加用户

简单shell脚本的编写,Linux,shell,linux

#!/bin/bash
#循环语句
read -p "请输入密码:" PASSWORD

for USERNAME  in  `cat user.txt`
do
	id $USERNAME &>/dev/null
	if [ $? -eq 0 ]
	then 
		echo "该用户$USERNAME 已经存在"
	else
		useradd $USERNAME &>/dev/null
		echo "$PASSWORD"| passwd --stdin $USERNAME &>/dev/null
		echo "该用户$USERNAME添加成功"
	fi
done
批量ping IP地址

简单shell脚本的编写,Linux,shell,linux

#!/bin/bash
#批量pingIP地址
HOSTLIST=$(cat /home/kali/Desktop/iplist.txt)
for IP in $HOSTLIST
do 
	ping -c 3 -i 0.2 -w 3 $IP &>/dev/null
	if [ $? -eq 0 ]
	then
		echo "该IP:$IP是正常的"
	else
		echo "该IP: $IP是ping不通的"
	fi
done

简单shell脚本的编写,Linux,shell,linux

检测同一局域网,多台主机存活情况
#!/bin/bash
read -p "请输入网络位:" NETWORK

for ip in $(seq 100 254)  #seq用于生成数字100~254
do
	ping -c 3 -i 0.2 -w 3 $NETWORK.$ip &>/dev/null  && result=0 || result=1
	if [ $result -eq 0 ];then
		echo "IP地址: $NETWORK.$ip is up !!"
		echo $NETWORK.$ip >> /tmp/up.txt
	else
		echo "IP地址: $NETWORK.$ip is down !!"
		echo $NETWORK.$ip >> /tmp/down.txt
	fi
done

简单shell脚本的编写,Linux,shell,linux

多线程检测主机存活情况

echo输入带颜色的内容相关博客

#!/bin/bash
read -p "请输入IP网络位:" ip  
for i in $(seq 1 254) #seq用于生成数字1~254
    do
    { 
           ping $ip.$i -c1 -s1 2>&1 1>/dev/null &&  
           echo -e ping $ip.$i"\033[32m通的!\033[0m" || 
        echo -e ping $ip.$i"\033[31m不通的!\033[0m" 
        } &  #注意在shell中不支持多线程的.这里&是采用多进程执行方式,{}里执行了,不管结束没结束继续执行下一条.
 
done
wait #{}执行完,执行下一条,相当于高级语言多线程同步作用.
echo "扫描检测已结束。"

简单shell脚本的编写,Linux,shell,linux

while循环
while 条件
do
	命令序列
done

$RANDOM是linux中的内置变量,可以随机生成0-32767之间的整数数字

简单shell脚本的编写,Linux,shell,linux

#!/bin/bash
TIMES=0
echo "该商品的价格为0--999之间,来猜一猜!"
PRICE=$(expr $RANDOM % 1000 )
while true
do
	read -p "请输入价格:" INT
	let TIMES++                       #自增
	if [ $INT -eq $PRICE ];then
		echo "恭喜你猜对了,价格为$PRICE"
		echo "猜了$TIMES次"
		exit
	elif [ $INT -gt $PRICE ];then
		echo "猜高了"
	else
		echo "太低了"
	fi
done

简单shell脚本的编写,Linux,shell,linux

case选择语句
case 变量值 in 
模式1
	命令序列1
模式2 
	命令序列2
....
	默认命令序列
esac
#!/bin/bash
read -p "请输入一个字符:" KEY
case "$KEY" in
	[a-z]|[A-Z])
		echo "这是字母"
		;;
	[0-9])
		echo "这是数字"
		;;
	*)
		echo "这是特殊符号"
esac

简单shell脚本的编写,Linux,shell,linux文章来源地址https://www.toymoban.com/news/detail-683198.html

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

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

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

相关文章

  • 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日
    浏览(36)
  • Linux【脚本 05】交互式shell脚本编写及问题处理([: ==: unary operator expected)[: ==: 期待一元表达式

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

    2024年02月09日
    浏览(47)
  • 简单shell脚本的编写

    shell脚本就是将命令写入文本中,文本可以被执行。 脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译) shell 既是应用程序,又是一种脚本语言(应用程序 解析 脚本语言)。 简单使用 $0 表示当前

    2024年02月10日
    浏览(40)
  • Linux GCC,GDB,Shell脚本,Vim的简单使用

    GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器 编译一个简单的.c程序: 四步分开写: 分成两步: 一步到位:(这个hello就是可执行文件,存放程序结果) 一下编译多个源文件 gcc -o hello hello.c这种一步到位的方法会将文本文件直接转化成可执行文件,这

    2024年02月09日
    浏览(66)
  • 一篇文章教会你如何编写一个简单的Shell脚本

    Shell脚本概念 Shell 脚本是一种用于自动化执行一系列命令和操作的脚本文件。它使用的是 Shell 解释器(如 Bash、Korn Shell、Zsh 等)来解释和执行其中的命令。Shell 脚本通常用于编写简单的任务和工作流程,可以帮助我们进行系统管理、批量处理、自动化部署等任务。 以.sh后缀

    2024年02月10日
    浏览(50)
  • 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日
    浏览(75)
  • Linux编写简易shell

    思路:​ ​ ​ 所以要写一个shell,需要循环以下过程:​ 获取命令行 解析命令行 建立一个子进程(fork) 替换子进程(execvp) 父进程等待子进程退出(wait) 实现代码:​         以上就是本文的全部内容,如果对你有帮助,欢迎点赞收藏转发评论! 

    2024年01月20日
    浏览(36)
  • Linux自定义shell编写

    经过了创建进程,终止进程,进程等待和进程程序替换之后, 我们就可以借助这些知识实现一个简单的shell命令行解释器了 温馨提示: 建议大家自己写一遍,这些代码分块之后每一个函数都很简单, 不过实现过程中可能会有各种各样非常细枝末节的地方被我们所忽视 因此可能会发生

    2024年02月04日
    浏览(41)
  • 【Linux之Shell脚本实战】Linux创建新用户脚本

    1.要求用户输入用户名和密码,新建用户; 2.如果用户没有输入,则提醒退

    2023年04月17日
    浏览(40)
  • 【Linux】进程实践项目 —— 自主shell编写

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

    2024年04月14日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包