shell - shell总结(待续)

本文介绍Shell脚本的基础知识,包括变量定义与使用、命令替换、特殊变量、字符串操作、数组处理、条件语句及循环控制等内容。通过实例演示了如何进行算术运算、字符串处理、路径解析等常见任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/bash  # #!是一个约定的标记,告诉系统这个脚本需要什么解释器来执行
echo "shell test start -----"

echo "---------- 定义变量 ----------"
# 定义变量
country="china"
num=100

echo "---------- 使用变量 ----------"
# 使用变量:${}
echo "country name is : ${country}"
echo "num is : ${num}"

echo "---------- 命令替换 反引号 ----------"
# 命令替换,反引号``
dir=`pwd`
echo "dir is : ${dir}"

echo "---------- 特殊变量 ----------"
echo "---------- 当前脚本的文件名 ----------"
echo $0 

echo "---------- 传递给脚本的参数,n是一个数字,表示第几个参数----------"
echo "---------- 执行sh test.sh 127.0.0.1 master 输出后面的参数如下 ----------"
echo "---------跟在后面的第一个参数----------"
echo $1
echo "---------- 后面的 第二个参数----------"
echo $2

echo "---------- 输出传递给脚本的参数个数 ----------"
echo $#

echo "---------- 输出传递给脚本的所有参数 ----------"
echo $*

echo "---------- 当前shell进程id,当前脚本所在的进程id ----------"
echo $$

echo "---------- shell 中的转义 ----------"
echo "---------- 反斜杠 ----------"
echo \\

echo "---------- 把一个命令的输出赋值给一个变量(将命令用反引号引起来)----------"
# 输出当前路径
dir=`pwd`
echo $dir

# 输出当前路径下的ll命令的输出
order=`ls -l`
echo $order

echo "---------- shell 算数运算符:expr, 表达式与运算符之间要有空格 ----------"
a=10
b=20
echo "---------- 加  ----------"
expr $a + $b

echo "---------- 减 ----------"
expr $a - $b

echo "---------- 乘,expr中的乘号为:\* ----------"
expr $a \* $b

echo "---------- 除 ----------"
expr $a / $b

echo "---------- 取余 ----------"
expr $a % $b


echo "----------shell中的字符串 ----------"
echo "----------单引号中的任何字符都会原样输出,单引号字符串中的变量无效,其中不能出现单引号,转义后也不行 ----------"
echo "----------双引号中可以有变量,双引号里可以出现转义字符 ----------"
echo '---------- [ $a == $b ]: 相等,比较两个数字相同则返回true ----------'
# echo [ $a == $b ]

echo "---------- [ $a != $b ] : 不相等,比较两个数字,不相同则返回true ----------"
# echo [ $a != $b ]

echo "---------- 赋值:将变量b的值赋值给a ----------"
a=$b
echo $a

echo "---------- 拼接字符串 ----------"
coun="china"
echo "hello, ${coun}"

echo "---------- 获取字符串长度 ----------"
my_str="abcd"
echo ${#my_str}

echo "---------- 提取子字符串 ----------"
large_str="china is a great country!"
echo "---------- 计算字符串长度 ----------"
echo `expr length "$large_str"`
echo $large_str
echo '输出 echo ${large_str::5}'
echo ${large_str::5}
echo '输出 echo ${large_str:1:5}'
echo ${large_str:1:5}
echo '输出 ${large_str:2:6}'
echo ${large_str:2:6}

echo "---------- 查找子字符串??? ----------"
echo `expr index "$large_str" n`

echo "---------- 处理路经的字符串: ----------"
echo "---------- 例:当一个路径为 /home/xiaoming/1.txt时 ----------"
echo "---------- 得到文件名使用 basename命令  ----------"
res=`basename /home/xiaoming/1.txt`
echo $res

echo "---------- basename -a 表示处理多个路径 ----------"
txt_path="/home/xiaoming/1.txt"
sh_path="/home/xiaoming/2.sh"
ret=`basename -a "$txt_path" "$sh_path"`
echo $ret

echo "---------- basename -s 用于去掉指令的文件的后缀名  ----------"
txt_path="/home/xiaoming/1.txt"
result=`basename -s .txt "$txt_path"`
echo $result

echo "---------- 得到路径,不带文件名,使用dirname命令 ----------"
txt_path="/home/xiaoming/1.txt"
sh_path="/home/xiaoming/2.sh"
ret=`dirname "$txt_path"`
echo $ret

echo "---------- 处理多个路径 ----------"
res=`dirname "$txt_path" "$sh_path"`
echo $res

echo "---------- shell 用括号表示数组,元素之间用空格分开,只支持一维数组,下标从0开始,----------"
my_array=("xiaoming" "xiaoxue" "xiaohua" "xiaomei")
echo "读取数组的全部元素,使用@或*"
echo ${my_array[*]}
echo ${my_array[@]}

echo '---------- 读取某个下标的元素: ${array_name[index]} ----------'
echo ${my_array[0]}
echo ${my_array[1]}
echo ${my_array[2]}
echo ${my_array[3]}

echo '---------- 获取数组元素的个数:${#array_name[*]}  ----------'
echo ${#my_array[*]}
echo '---------- 获取数组元素的下标:${!array_name[*]} ----------'
echo ${!my_array[*]}
echo '---------- 获取数组单个元素的长度:${#array_name[n]} ----------'
echo ${#my_array[0]}

echo "---------- shell printf函数用法 ----------"
echo "1,printf命令不用加括号"
echo "2,format-string 可以没有引号,最好加上,单双引号均可"
echo "3,参数多于格式控制符(%)时,format-string可以重用,可将所有参数都转换"
echo "4,arguments使用空格分隔,不用逗号"
printf "name = %s, age = %d" "xiaoming" 18

echo "---------- 重点:shell中的条件语句 ----------"
echo "---------- if 语句: ----------"
echo 'if [表达式] then 语句 fi'
echo 'if [表达式] then 语句 else 语句 fi'
echo 'if [ 表达式] then 语句  elif[ 表达式 ] then 语句 elif[ 表达式 ] then 语句   …… fi'
a=10
b=20
if [ $a == $b ]
then
    echo "a = b"
else
    echo "a != b"
fi

echo "---------- for 循环语句 ----------"
for num in 1 2 3 4 5
do 
    echo "num is: $num"
done
echo "---------- 显示主目录一下的文件 ----------"
for f in $HOME/*
do
    echo $f
done

echo "---------- while循环 ----------"
COUNT=0
while [ $COUNT -lt 5 ]
do
    COUNT=`expr $COUNT + 1`
    echo $COUNT
done

echo "---------- until循环:循环执行一系列命令,直至条件为true时停止 ----------"
echo "---------- unitl循环与while循环在处理方式上刚好相反 ----------"
NUM=5
until [ $NUM -ge 10 ]
do
    NUM=`expr $NUM + 2`
    echo $NUM
done


echo "---------- shell 函数:shell函数必须先定义后使用 ----------"
echo "注意点1,调用函数只需要给出函数名,不需要加括号  ----------"
echo "注意点2,函数返回值,可以显示增加return语句;如果不加,会将最后一条命令运行结果作为返回值  ----------"
echo "注意点3,shell函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败  ----------"
echo '注意点4,函数参数可以通过$n得到  ----------'
function my_func(){
    echo "my first function ------"
    echo "first param is :  $1"
    echo "first param is :  $2"
    echo "params count is :  $#"
    echo "all param is : $*"
}
my_func 'hehe' 'haha'

echo "---------- shell文件包含:source filename 将外部脚本的内容合并到当前脚本,被包含脚本不需要执行权限 ----------"
# source /mnt/shell/test01.sh
echo "----------  ----------"
echo "----------  ----------"
echo "----------  ----------"
echo "----------  ----------"
echo "----------  ----------"

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值