shell 命令: 一些小技巧
#!/bin/bash
trap '' 1 2 3 20 # trap 命令捕获这些幸好,防止用户通过ctrl-c ctrl-z 终止脚本
stty -echo # 终端不回显
read -p "key: " key_1
echo
read -p "again: " key_2
echo
key_3=''
if test "$key_1" == "$key_2"
then
tput clear # 清屏幕
until test "$key_3" == "$key_2"
do
read key_3
done
else
echo "key not match,not locked" 1>&2
fi
stty echo
# sh find.sh 123
grep -i "$1" <<+
abc 123
def 456
ghi 789
+
$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数,此选项参数可超过9个
$@ 跟$*类似,但是可以当作数组用
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
上面 $* 和 $@ 可以一样用,但是加上双引号的时候就不一样了,“$*” 是一个参数,“$@” 是多个参数
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个/及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个/及其左边的字符串:my.file.txt
${file#*.}:删掉第一个.及其左边的字符串:file.txt
${file##*.}:删掉最后一个.及其左边的字符串:txt
${file%/*}:删掉最后一个/及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个/及其右边的字符串: ${file%.*}:删掉最后一个.及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个.及其右边的字符串:/dir1/dir2/dir3/my 记忆的方法为: # 是去掉左边(键盘上#在 $ 的左边) % 是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的0~5个字符/dir1
${file:5:5}: 从第5个字符开始,提取5个字符 /dir2,这个跟cut -c 5-10 效果一样
g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
G: 将hold space中的内容append到pattern spacen后
h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
H: 将pattern space中的内容append到hold spacen后
x: 交换pattern space和hold space的内容
sed 常用技巧: [coolshell](http://coolshell.cn/articles/9104.html)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |