shell script学习笔记5

本文介绍了 Bash 脚本中的一些实用技巧,包括 wait 命令的使用,xargs 的工作原理及常见用法,basename 和 dirname 的功能区别,tr 命令的高级应用,getopt 参数解析的两种方式,受限模式运行脚本的方法,进程替换的技巧,以及 Bash 函数定义和变量处理的最佳实践。

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

wait

停止脚本的运行,直到后台运行的所有作业停止为止(或者是特定任务号,进程号)


xargs
xargs的默认命令是echo,意味通过管道传来的输入通过xargs命令处理后,换行和空白都将被空格替代

xargs -i用法: ls *.txt | xargs -i cp ./{} target_dir/ 等效 cp *.txt target_dir/


basename

从文件名中去掉路径信息


dirname

从带路径的文件名中去掉文件名,保留路径信息


tr -cd "c" file.txt
-d 作用是删除指定的字符,这里说是要删除"c"
-c 作用是指定字符串补码,相当于取反操作
所以这里的意思是删除file.txt中除"c"以外的字符,这样输出就只剩下多个"c",
其可以用来统计字符数目


getopt的两种用法 "abcd:" 代表-d后面加数字参数
while getopt "abcd:" option
do
echo $option
echo $OPTARG
done
------------------------------
set -- `getopt "abcd" "$@"`
while [ ! -z "$1" ]
do
echo $1
echo $2
shift # need to do once again for -d
done


#!/bin/bash -r

会使得脚本在受限模式下运行,此模式会禁用一些命令,限制用户权限


进程替换把一个进程的输出回馈给另外一个进程,"<"或者">"与圆括号之间没有空格!
例子:
diff <(ls -l) <(ls -al)
cat <(ls -al) # 等同 ls -al | cat
tar cf >(bzip2 -c > file.tar.bz2) $directory_name
--------------------
while read line
do
...
done< <(command)
也可以用如下方法,但是使用管道会产生子shell,子shell中的变量是局部变量!
command | while read line
do
...
done


函数必须在第一次调用前完成定义
在一个函数中嵌套调用另外一个函数也是可以的
函数可以处理传递给他的参数并且能够返回他的退出码
在函数内部是看不到脚本的命令行参数的,就是说$0只能是函数的参数
为函数可以返回字符串或是数组,可以用一个在函数外可见的变量;或者让函数echo出他的返回值,输出到stdout上
然后通过命令替换的手段来捕获他

change()
{
    eval "$1=\"yes\""
    name="jack" # 非local
}

text="no"
echo "$name" # 空
change text
echo "$text" # yes
echo "$name" # jack 在函数调用之后,所有在函数内声明且没有明确声明为local的变量都可以在函数体外可见
!! 特别注意在递归中,你定义的变量如果不是local的,会出现一些奇怪的问题;比如在上一次递归已经给改变了!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值