shell语法

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




转载于:https://www.cnblogs.com/fdipzone/archive/2013/01/02/3715143.html

<think>好的,用户想了解Shell语法的问题。首先,我需要确定用户对Shell的了解程度,但用户没有明确说明,所以应该从基础开始,逐步深入。 Shell有很多种,比如Bash、Zsh等,但最常见的是Bash,所以先假设用户问的是Bash。接下来,需要考虑常见的问题点,比如变量、字符串处理、条件判断、循环、函数、重定向、管道、脚本调试等。 用户可能需要实际例子来理解语法,所以每个部分都要配上示例代码。同时,要提醒语法中的常见错误,比如空格问题、引号的使用、变量赋值不能有空格等。 还要注意格式,按照用户的要求,行内公式用$...$,独立公式用$$...$$,不过Shell语法中可能数学表达式不多,但如果有的话要正确应用。比如在算术展开时,可以用$((表达式)),但这里可能不需要LaTeX公式,但如果有涉及数学的地方,比如计算,可能需要提到。 另外,用户希望结构清晰,分步骤解决问题,所以需要分点列出各个语法部分,每个部分给出说明和示例。可能还需要比较不同Shell的差异,但考虑到用户可能刚入门,先以Bash为主,最后再简要提及其他Shell。 最后,需要检查LaTeX语法是否正确,虽然Shell内容中可能用到的数学公式不多,但如果有变量或表达式,确保用$...$包裹。比如在讲解算术运算时,可能涉及变量$var,这时候需要正确应用格式。 总结,回答应该分为变量、字符串处理、条件判断、循环、函数、输入输出、调试等部分,每个部分给出简明解释和示例,并注意常见错误点,帮助用户逐步理解和解决问题。</think>以下是对Shell语法问题的分步介绍: 1. **变量操作** - 定义变量:`变量名=值`(⚠️注意:等号两边不能有空格) ```bash name="Alice" age=25 ``` - 使用变量:`$变量名` 或 `${变量名}` ```bash echo $name # 输出 Alice echo ${name}_info # 输出 Alice_info ``` 2. **字符串处理** - 拼接字符串: ```bash str1="Hello" str2="World" result="$str1 $str2!" # Hello World! ``` - 截取子串: ```bash str="abcdefg" echo ${str:1:3} # 输出 bcd(从索引1开始取3个字符) ``` 3. **条件判断** - 基本格式: ```bash if [ 条件 ]; then # 命令 elif [ 条件 ]; then # 命令 else # 命令 fi ``` - 常用比较运算符: ```bash [ $a -eq $b ] # 等于 [ $a -gt $b ] # 大于 [ -f "file" ] # 文件存在 [ -z "$var" ] # 变量为空 ``` 4. **循环结构** - for循环: ```bash for i in {1..5}; do echo $i done ``` - while循环: ```bash count=0 while [ $count -lt 5 ]; do echo $count ((count++)) done ``` 5. **函数定义** ```bash function greet() { local name=$1 # 局部变量 echo "Hello, $name" } greet "Bob" # 调用函数 ``` 6. **输入/输出重定向** ```bash command > file.txt # 覆盖写入 command >> file.txt # 追加写入 command 2>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值