IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> shell脚本中的${1#-}和${1%.conf} -> 正文阅读

[系统运维]shell脚本中的${1#-}和${1%.conf}

在redis中的镜像看到这么一个脚本

cat /usr/local/bin/docker-entrypoint.sh 
#!/bin/sh
set -e

# first arg is `-f` or `--some-option`
# or first arg is `something.conf`
if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
	set -- redis-server "$@"
fi

# allow the container to be started with `--user`
if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then
	find . \! -user redis -exec chown redis '{}' +
	exec gosu redis "$0" "$@"
fi

exec "$@"
root@10e778388e68:/data#

其中第一个 if 作知识补充整理:

if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
	set -- redis-server "$@"
fi

?第一个判断? ${1#-} ,对带有 - 的前缀进行删掉第一个,如果是 -- 就删除只剩下一个 - :

把脚本拿出来进行测试改造:

[root@test 15:05:03/data/recycle]# cat sh.sh 
t=${1#-}
echo $t

if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
	set -- redis-server "$@"
fi
[root@test 15:05:23/data/recycle]#
[root@test 15:12:11/data/recycle]# sh -x sh.sh 78
+ t=78
+ echo 78
78

+ '[' 78 '!=' 78 ']'
+ '[' 78 '!=' 78 ']'
[root@test 15:12:15/data/recycle]# sh -x sh.sh -78
+ t=78
+ echo 78
78

+ '[' 78 '!=' -78 ']'
+ set -- redis-server -78
[root@test 15:12:21/data/recycle]# sh -x sh.sh --78
+ t=-78
+ echo -78
-78

+ '[' -78 '!=' --78 ']'
+ set -- redis-server --78
[root@test 15:12:25/data/recycle]# 

第二个判断? ${1%.conf},对带有 .conf?的后缀进行删掉:

把脚本拿出来进行测试改造

s=${1%.conf}
echo $s

if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
        set -- redis-server "$@"
fi
[root@test 15:12:25/data/recycle]# sh -x sh.sh 78.conf
+ s=78
+ echo 78
78
+ '[' 78.conf '!=' 78.conf ']'
+ '[' 78 '!=' 78.conf ']'
+ set -- redis-server 78.conf
[root@test 15:15:25/data/recycle]# sh -x sh.sh 78
+ s=78
+ echo 78
78
+ '[' 78 '!=' 78 ']'
+ '[' 78 '!=' 78 ']'
[root@test 15:15:27/data/recycle]# 

其中两个命令知识补充:

find . \! -user redis -exec chown redis '{}' +
exec gosu redis "$0" "$@"

find? \!? 取反,这里表示不是 redis 用户的文件或目录查找出来, + 跟 \; 做结尾是一样的意思。

gosu命令是docker作为安全的最好要求,在容器中用gosu工具替换sudo命令去执行,而且能保证ps中的id进程为1。

这篇文章有详解

docker与gosu_程序员欣宸的博客-CSDN博客_docker gosu

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:37:43  更:2022-03-17 22:40:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:31:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码