shell语法

2023-05-16

1. 数组

#定义数组
array=("163" "21cn" "sina" "qq")

#获取数组长度
echo ${#array[*]}

#遍历数组
for arr in ${array[*]}; do
  echo $arr
done

2. 转换大小写
# 使用typeset后必须重新赋值才起作用

typeset -u content #upper
content="Show Me The Money"
echo $content

typeset -l content #lower
content="Show Me The Money"
echo $content

# 使用tr
content="Show Me The Money"
new_content=`tr '[a-z]' '[A-Z]' <<< "$content"`
echo $new_content

new_content=`tr '[A-Z]' '[a-z]' <<< "$content"`
echo $new_content

content="Show Me The Money"
new_content=$(echo "$content" | tr '[a-z]' '[A-Z]')
echo $new_content

new_content=$(echo "$content" | tr '[A-Z]' '[a-z]')
echo $new_content


3. 变量替换

${variable:-value}
当variable为空时,替换为value

${variable:+value}
当variable有值时,替换为value

${variable:=value}
当variable为空时,替换并赋值为value

${variable:?message}
当variable为空时,退出脚本,并标准错误输出message

${param#word}
从param头部开始删除到word匹配的最小部分,然后返回剩余的部分
${param##word}
从param头部开始删除到word匹配的最大部分,然后返回剩余的部分
${param%word}
从param尾部开始删除到word匹配的最小部分,然后返回剩余的部分
${param%%word}
从param尾部开始删除到word匹配的最大部分,然后返回剩余的部分

file="/home/fdipzone/shell/command.class.sh"
echo ${file#*/}  # home/fdipzone/shell/command.class.sh
echo ${file##*/} # command.class.sh
echo ${file%/*}  # /home/fdipzone/shell
echo ${file%%/*} # 空
echo ${file#*.}  # class.sh
echo ${file##*.} # sh
echo ${file%.*}  # /home/fdipzone/shell/command.class
echo ${file%%.*} # /home/fdipzone/shell/command
echo ${file/sh/php} # /home/fdipzone/phpell/command.class.sh
echo ${file//sh/php} # /home/fdipzone/phpell/command.class.php 替换多个 

4.调试脚本程序

set -n #不执行脚本,只检查语法错误
set -v #在执行命令之前回显
set -x #在执行命令之后回显
set -u #如果使用了未定义变量,给出错误提示。

5.here文档
在shell脚本中向命令输入的方法。

cat <<!fdipzone!
Hello Wolrd
Shell Ok
!fdipzone!

6.参数变量
$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数

7.文件路径与文件名
#!/bin/bash

echo "dirname:$(dirname $0)"

echo "basename:$(basename $0)"

exit 0

8.读取输入数据
#!/bin/bash

# read命令 -p(提示语句) -n(字符最多个数) -t(等待时间) -s(不回显)

TIMEOUT=5

printf "Please input a number: "
read -t "$TIMEOUT" number

if [ "$number" ]; then
	printf "number is: $number\n"
else
	printf "\nnot input number\n"
fi

read -s -n10 -p "Please input the password:" password
printf "\nPassword is: $password\n"

exit 0

9.DEBUG
#!/bin/bash

DEBUG=true

function debug(){
	"$DEBUG" && echo $(tput setaf 1;)"DEBUG >>>"$(tput sgr0)" $*"
}

debug 'file not exists'

exit 0

10.打印使用说明
#!/bin/bash

function print_info(){

cat <<!INFO!

Usage: myscript <command>

Version: $1

Available Commands

  start:   start worker

  stop:    stop worker

  restart: restart worker

!INFO!

}

print_info 1.0

exit 0

11.使打印字符串有颜色
#!/bin/bash

NORMAL=$(tput sgr0)
GREEN=$(tput setaf 2; tput bold; tput setab 5)
YELLOW=$(tput setaf 3; tput setab 4)
RED=$(tput setaf 1)

function red(){
	echo "$RED$*$NORMAL"
}

function green(){
	echo "$GREEN$*$NORMAL"
}

function yellow(){
	echo "$YELLOW$*$NORMAL"
}

green "Task has been completed"

red "The configuration file does not exist"

yellow "You have to use higher version."

exit 0


12. 生成指定位数的随机密码 

# 生成8位随机密码
cat /dev/urandom | head -n 1 | md5sum | head -c 8

date +%N | md5sum | head -c 8

13. 截取字符串

var='1234567890abcdefg'
echo ${var:3:10} # 从字符串第3位开始截取,截取10个字符,输出4567890abc




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell语法 的相关文章

  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • Shell 脚本中的块注释

    有没有一种简单的方法可以注释掉 shell 脚本中的代码块 In bash bin bash echo before comment lt lt END bla bla blurfl END echo after comment The a
  • java Runtime.getRunTime().exec 和通配符?

    我正在尝试使用删除垃圾文件 Process p Runtime getRuntime exec 只要我不使用通配符 它 就可以正常工作 即 Process p Runtime getRuntime exec bin rm f specifi
  • 在 UNIX 中删除相同的文件

    我正在处理大量 30 000 个 大小约为 10MB 的文件 其中一些 我估计 2 实际上是重复的 我只需要为每个重复的对 或三元组 保留一个副本 您能建议我一种有效的方法吗 我正在unix上工作 您可以尝试使用此代码片段在删除之前先获取所
  • 如何在 C# 中启动文件

    编辑 我觉得自己像个白痴 我有一种感觉 像下面的答案会起作用 但没有看到任何与下面的答案类似的谷歌结果 所以当我看到这段复杂的代码时 我想它一定是这样的 我搜索并找到了这个Windows 列出并启动与扩展关联的应用程序 https stac
  • 如何在Shell脚本中解析字符串

    我想在 shell 脚本中解析以下字符串 VERSION 2 6 32 54 0 11 def 这里我想得到两个值 first 263254 second 11 我使用以下方法来获取第一个值 first expr substr VERSIO
  • shell中如何求数组的长度?

    shell中如何求数组的长度 例如 arr 1 2 3 4 5 我想得到它的长度 在本例中是 5 a 1 2 3 4 echo a 4
  • awk 返回两个变量

    现在这就是我正在做的事情 ret ls la awk print 3 9 usr echo ret awk print 1 fil echo ret awk print 2 问题是我没有运行ls我正在运行一个需要时间的命令 因此您可以理解其
  • shell解析json并循环输出组合变量

    杰斯克喜欢我之前的话题 https stackoverflow com questions 74063588 shell parsing json contains spaces in string 我知道如何解析带有空格的简单 json
  • 在 bash 中,如何除以两个变量并输出四舍五入到小数点后 5 位的答案? [复制]

    这个问题在这里已经有答案了 我将两个变量作为输入 将它们相除后 我希望将输出四舍五入到小数点后 5 位 我已经尝试过这种方法 gt sum 12 n 7 output scale 5 sum n bc echo output 我的代码没有显
  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • sed 和 rev shell 命令转换为 Python 脚本 [重复]

    这个问题在这里已经有答案了 有一个shell命令 我正在尝试将逻辑转换为python 但我不知道该怎么办 我需要一些帮助 shell命令是这样的 cd tests src main test ls find name vrlp while
  • 批量检测系统是32位还是64位

    有谁知道如何创建一个批处理文件 如果是 64 位系统 可以对一个程序进行 shell 处理 如果是 32 位系统 则可以对另一个程序进行 shell 处理 检查 PROCESSOR ARCHITECTURE being x86 if PRO
  • 如何将命令输出作为多个参数传递给另一个命令

    我想将命令的每个输出作为多个参数传递给第二个命令 例如 grep pattern input returns file1 file2 file3 我想复制这些输出 例如 cp file1 file1 bac cp file2 file2 b
  • HBase Shell 日志记录

    使用 HBase shell 时 我收到大量日志记录 包括 INFO 和 DEBUG 消息 虽然这对于学习 HBase 内部结构来说很有趣 但它非常冗长并且可能会掩盖输出 我尝试过以多种不同的方式更改日志记录级别 包括所描述的here ht
  • 如何在不使用 MacPorts 或 Fink 的情况下在 OS X Leopard 上安装 lxml?

    我过去曾多次尝试过此操作并遇到问题 有没有人有在没有 MacPorts 或 Fink 的情况下在 OS X 上安装 lxml 的方法 并且绝对有效 最好有完整的 1 2 3 步骤来下载和构建每个依赖项 感谢 Twitter 上的 jesse
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • 带变量的 AWK 负正则表达式

    我在 bash 脚本中使用 awk 来比较两个文件以获取不匹配的行 我需要将第二个文件的所有三个字段 作为一个模式 与第一个文件的所有行进行比较 第一个文件 chr1 9997 10330 HumanGM18558 peak 1 150 1
  • ubuntu 中的 echo -e 选项不起作用

    我的同事使用Ubuntu 我使用openSUSE 我们使用相同的makefile编译相同的源代码 我的环境运行良好 但我的同事不能 总是输出无法识别 e选项 我们检查makefile 只发现echo命令使用 e option Ubuntu的

随机推荐

  • php 创建带logo二维码类

    本文介绍php实现创建二维码类 xff0c 支持设置尺寸 xff0c 加入LOGO xff0c 描边 圆角 透明度 xff0c 等处理 提供完整代码 xff0c 演示实例及详细参数说明 xff0c 方便大家学习使用 实现功能如下 xff1a
  • Mac ssh使用pem文件登录远程服务器

    登录远程服务器我们可以使用ssh命令 xff0c 部分远程服务器访问需要授权 xff0c ssh命令支持使用pem文件进行授权访问 命令如下 xff1a ssh i identity file user span class hljs va
  • mysql重建表分区并保留数据的方法

    本文介绍mysql重建表分区并保留数据的方法 xff0c mysql的表分区 partition 可以把一个表的记录分开多个区去存储 xff0c 查询时可根据查询的条件在对应的分区搜寻 xff0c 而不需要整表查询 xff0c 提高查询效率
  • php json_encode不支持对象私有属性的解决方法

    本文介绍php json encode不支持对象私有属性的解决方法 xff0c json encode可以把对象转为json格式 xff0c 使用json decode可以还原为对象 但如果对象内含有私有属性 xff0c 执行json en
  • Sublime Text 2 介紹

    代码编辑器或者文本编辑器 xff0c 对于程序员来说 xff0c 就像剑与战士一样 xff0c 谁都想拥有一把可以随心驾驭且锋利无比的宝剑 xff0c 而每一位程序员 xff0c 同样会去追求最适合自己的强大 灵活的编辑器 xff0c 相信
  • PHP生成唯一RequestID类

    本文介绍PHP生成唯一RequestID类 xff0c 使用session create id 与uniqid 方法 xff0c 保证唯一性 xff0c 提供完整代码及演示 xff0c 方便大家学习使用 现在的系统设计一般使用分布式系统 x
  • php生成QRcode

    lt php ini set 39 display errors 39 39 on 39 PNG TEMP DIR 61 dirname FILE DIRECTORY SEPARATOR 39 temp 39 DIRECTORY SEPAR
  • C语言--函数

    C语言中include头文件的语法 xff1a include lt stdio h gt xff0c 先从系统include文件中寻找 xff0c 再去项目include中寻找 xff1b include 34 my h 34 xff0c
  • JS获取CSS属性值

    lt DOCTYPE HTML PUBLIC 34 W3C DTD HTML 4 01 Transitional EN 34 34 http www w3 org TR html4 loose dtd 34 gt lt html gt lt
  • JS判断碰撞方法

    JS判断碰撞方法 判断是否碰撞 64 param obj 原对象 64 param dobj 目标对象 function impact obj dobj var o 61 x getDefaultStyle obj 39 left 39 y
  • PHP字符串比较

    我们在代码中用的最多的逻辑是什么 你知道如下的几段代码的布尔结果分别是什么么 var dump 34 1 34 61 61 34 1e0 34 var dump 34 1 34 61 61 34 0x1 34 var dump 34 20
  • 播放音乐方法(兼容IE FF Chrome Opera Safari)

    音乐播放器 64 param obj 播放器id 64 param file 音频文件 mp3 ogg 64 param loop 是否循环 function audioplayer id file loop var audioplayer
  • PHP AES256加密算法

    aes class php lt php AES implementation in PHP c Chris Veness 2005 2011 Right of free use is granted for all commercial
  • javascript var 重要性

    javascript 的 var 作用是声明变量 一般情况下不写都不会出错 xff0c 但有些情况如果不写 xff0c 会有不同的结果 lt div id 61 34 a 34 gt lt div gt lt script type 61
  • mysql判斷字段是否存在方法

    1 desc 命令 格式 desc tablename columnname 例子 desc 96 table 96 96 mid 96 desc 96 table 96 39 abc 39 2 show columns 命令 格式 sho
  • php 发送带附件邮件

    emailclass php lt class CMailFile var subject var addr to var text body var text encoded var mime headers var mime bound
  • ubuntu系统使用命令

    1 复位面板 打开终端 xff0c 终端窗口打开之后 xff0c 立即在提示符后面输入下列命令 gconftool recursive unset apps panel rm rf gconf apps panel pkill gnome
  • Windows安装Anaconda并且配置国内镜像教程

    前言 我们在学习 Python 的时候需要不同的 Python 版本 xff0c 关系到电脑环境变量配置换来换去很是麻烦 xff0c 所以这个时候我们需要一个虚拟的 Python 环境变量 xff0c 我之前也装过 virtualenv v
  • linux常用命令

    1 ls 显示目录文件夹及文件 使用方式 ls lt a 显示目录下所有文件及文件夹包括 与 A 显示目录下所有文件及文件夹不包括 与 l 显示目录下所有文件及文件夹详细信息 t 按修改时间排序 倒序 F 如目录后加 如可执行文件后加 r
  • shell语法

    1 数组 定义数组 array 61 34 163 34 34 21cn 34 34 sina 34 34 qq 34 获取数组长度 echo array 遍历数组 for arr in array do echo arr done 2 转