当前位置: 首页 > news >正文

Shell 脚本01

创建第一个 Shell 脚本

Shell 位置参数变量

在 Shell 中存在一些特殊且重要的变量,例如:$0$1,我们称之为位置参数变量。要从命令行、函数或脚本执行等处传递参数时,就需要在 Shell 脚本中使用位置参数变量。

部分位置参数变量如下:

  1. $0,获取当前执行的 Shell 脚本的文件名,如果执行脚本包含了路径,那么就包括脚本路径。
  2. **n∗∗,获取当前执行的Shell脚本的∗∗第n个参数值∗∗。如果n大于9,则用大括号括起来,例如n**,获取当前执行的 Shell 脚本的**第n个参数值**。如果n大于9,则用大括号括起来,例如n,获取当前执行的Shell脚本的n个参数值。如果n大于9,则用大括号括起来,例如{10},接的参数以空格隔开。
  3. $#,获取当前执行的 Shell 脚本后面接的参数数量
  4. **∗∗∗,获取当前Shell脚本所有传参的参数,不加引号和‘***,获取当前 Shell 脚本所有传参的参数,不加引号和`,获取当前Shell脚本所有传参的参数,不加引号和@相同;如果给∗‘加上双引号,例如:‘"*`加上双引号,例如:`"加上双引号,例如:‘"*",则表示将所有的参数视为单个字符串,相当于$1 $2 $3`。
  5. **@∗∗,获取当前Shell脚本所有传参的参数,不加引号和@**,获取当前 Shell 脚本所有传参的参数,不加引号和@,获取当前Shell脚本所有传参的参数,不加引号和*相同;如果给@加上双引号,例如:‘@加上双引号,例如:`@加上双引号,例如:@,则表示将所有的参数视为不同的独立字符串,相当于"$1"、“$2”、“$3”…`,这是将多参数传递给其他程序的最佳方式,因为它会保留所有的内嵌在每个参数里的任何空白。

控制某个服务的脚本

ssh_ctl start 启动服务

ssh_ctl stop 停止服务

[root@webapp bin 16:55:04]# vim ssh_ctl#!/bin/bash
systemctl $1 sshd[root@webapp bin 16:56:02]# chmod +x ssh_ctl
[root@webapp bin 16:56:38]# ssh_ctl status
● sshd.service - OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: active (running) since 四 2025-10-09 11:18:03 CST; 5h 38min agoDocs: man:sshd(8)man:sshd_config(5)Main PID: 129419 (sshd)Tasks: 1CGroup: /system.slice/sshd.service└─129419 /usr/sbin/sshd -D[root@webapp bin 16:56:43]# ssh_ctl stop
[root@webapp bin 16:57:14]# ssh_ctl status
● sshd.service - OpenSSH server daemonLoaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)Active: inactive (dead) since 四 2025-10-09 16:57:14 CST; 3s agoDocs: man:sshd(8)man:sshd_config(5)Process: 129419 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS)Main PID: 129419 (code=exited, status=0/SUCCESS)
[root@webapp bin 16:57:38]# vim service_ctl #!/bin/bash
systemctl $1 $2
[root@webapp bin 16:58:24]# chmod +x service_ctl

read 命令实践

[root@webapp bin 17:00:21]# vim create_user.sh
#!/bin/bash#用户输入用户名
read -p "请输入用户名:" username#输入密码
read -s -p "请输入密码:" password
echo #用户性别
read -p "请输入性别:" usersex#用户年龄
read -p "请输入年龄:" userage# 创建用户
useradd "$username"# 设置用户密码
echo ${password} | passwd --stdin ${username}#将以上用户信息存储到/etc/user.info中
echo ${username}:${usersex}:${userage}:x >> /etc/users.info[root@webapp bin 17:01:33]# cat /etc/users.info
zzz:man:18:x

数值计算

算术运算符

如果要执行算术运算,就会离不开各种运算符号,和其他编程语言类似,Shell 也有很多算术运算符。

下面就给大家介绍一下常见的 Shell 算术运算符:

  • +、-一元正号和负号。
  • +、-,加法和减法。
  • *、/、%,乘法、除法、取余(取模)。
  • **,幂运算。
  • ++、–,增加及减少,可前置也可放在变量结尾。
  • !、&&、||,逻辑非(取反)、逻辑与(and)、逻辑或(or)。
  • <、<=、>、>=,比较符号(小于、小于等于、大于、大于等于)。
  • ==、!=、=,比较符号(相等、不相等,对于字符串也可以表示相当于)。
  • <<、>>,向左移位、向右移位。
  • ~、|、&、^,按位取反、按位异或、按位与、按位。
  • =、+=、-=、*=、/=、%=,赋值运算符,例如 a+=1 相当于 a=a+1a-=1 相当于 a=a-1

Shell 中常见的算术运算命令:

  • (()),用于整数运算的常用运算符,效率很高。
  • let,用于整数运算,类似于(())
  • expr,可用于整数运算,但还有很多其他的额外功能。
  • bc,Linux下的一个计算器程序(适合整数及小数运算)。
  • $[],用于整数运算。
  • awk,awk 既可以用于整数运算,也可以用于小数运算。
  • declare,定义变量值和属性,-i参数可以用于定义整形变量,做运算。

(()) 双小括号数值运算命令

双小括号 (()) 的作用是进行数值运算与数值比较,它的效率很高,用法灵活,是企业场景运维人员经常采用的运算操作符。

(()) 双小括号数值运算的基础语法

双小括号 (()) 的操作方法:

  • ((i=i+1)),此种书写方法为运算后赋值法,即将i+1的运算结果赋值给变量i。

    注意:不能用 echo ((i=i+l))输出表达式的值,可以用echo $((i=i+l))输出其值。

  • **i=((i+1))∗∗,可以在‘(())‘前加‘((i+1))**,可以在 `(())` 前加 `((i+1)),可以在(())前加` 符,表示将表达式运算后赋值给i。

  • (( 8>7 && 5==5)),可以进行比较操作,还可以加入逻辑与和逻辑或,用于条件判断。

  • **echo ((2+1))∗∗,需要直接输出运算表达式的运算结果时,可以在‘(())‘前加‘((2+1))**,需要直接输出运算表达式的运算结果时,可以在 `(())` 前加 `((2+1)),需要直接输出运算表达式的运算结果时,可以在(())前加` 符。

[root@webapp bin 17:01:38]# echo $[ 1+2 ]
3
[root@webapp bin 17:12:43]# echo $[ $(echo {1..100} | sed 's/ /+/g') ]
5050
[root@webapp bin 17:12:48]# echo $((1+2))
3

判断文件状态

# 如果目录存在,就提示目录存在
[root@webapp bin 17:13:07]# mkdir /tmp/zhangsan
[root@webapp bin 17:14:02]# test -d /tmp/zhangsan && echo /tmp/zhangsan is exist.
/tmp/zhangsan is exist.# 如果目录不存在,就创建目录
[root@webapp bin 17:14:13]# rmdir /tmp/zhangsan
[root@webapp bin 17:14:59]# test ! -d /tmp/zhangsan && mkdir /tmp/zhangsan
[root@webapp bin 17:15:04]# echo $?
0
# 第二次执行,目录已经存储
[root@webapp bin 17:15:08]#  test ! -d /tmp/zhangsan && mkdir /tmp/zhangsan
[root@webapp bin 17:15:22]# echo $?
1

文件常用状态判断
-d -e
-r -w -x
-u -g

字符串
string1 = string2
string1 != string2

确保脚本以root身份运行。

[root@webapp bin 17:15:29]# cat ssh_ctl 
#!/bin/bash
test "$USER" != "root" && echo Pls run as root. && exit
systemctl $1 sshd

判断数值大小

[root@webapp bin 17:17:35]# vim test_num.shread -p "请输入一个数字:" num
# 大于 10
(( $num>10 )) && echo "$num > 10"
# 小于 10
(( $num<10 )) && echo "$num < 10"
# 等于 10
(( $num==10 )) && echo "$num = 10"

if 语句

# 单分支
[root@webapp bin 17:18:01]# vim test_sshd 
systemctl is-active sshd &>/dev/nullif (( $?!=0 ));thenecho "Sshd is not running"echo -n "Start sshd ... "systemctl start sshd && echo Success.
fi # 双分支
[root@webapp bin 17:19:07]# vim test_sshd 
#!/bin/bashsystemctl is-active sshd &>/dev/nullif (( $?!=0 ));thenecho "Sshd is not running"echo -n "Start sshd ... "systemctl start sshd && echo Success.
elseecho "Sshd is already running."
fi 
http://www.dtcms.com/a/461298.html

相关文章:

  • 掌握外部中断基于GD32F407VE的天空星的配置
  • 销售部网站建设费crm客户管理系统模块
  • PyTorch深度学习(入门笔记)
  • SikuliX实战指南:可视化自动化与测试的核心!
  • 【ShiMetaPi M4-R1】OpenHarmony应用开发01:RArkUI 框架
  • 10.8考研笔记
  • auracast音箱-新标准新体验
  • 网站建设素材网页常州市钟楼区建设局网站
  • 网站付费怎么做海南学校网站建设
  • 前端学习 JavaScript(2)
  • Zookeeper删除提供者服务中的指定IP节点
  • 浦东建设网站制作来宾网站建设
  • 网站模板用什么打开wordpress移动广告不显示不出来
  • ArrayList和LinkedList的区别是什么?
  • 有没有做底单的网站做网站优化选阿里巴巴还是百度
  • 读写分离中间件简介
  • MR(混合现实)与AI(人工智能)结合的自主飞行技术
  • 鸿蒙:WaterFlow瀑布流组件的使用
  • Git高级操作:提升开发效率的实用别名设置
  • C++分布式语音识别服务实践——架构设计与关键技术
  • Hadoop YARN 与 MapReduce 基础关系及 YARN 核心架构细化解析
  • 网站续费模版秦皇岛网站建设价格
  • 16.链路聚合手动配置(2025年10月9日)
  • 做网站的技术门槛高吗做营销型网站费用
  • 做网站的网页图片素材怎么找海南省人才在线
  • opencv中旋转角度使用atan函数或atan2函数计算角度
  • 做详情页到那个网站找模特素材《高性能网站建设指南
  • 【蓝牙协议栈】蓝牙核心规范6.0新特性学习
  • vue中的 watchEffect、watchAsyncEffect、watchPostEffect的区别
  • Python从入门到实战:全面学习指南2