bash shell用法小记

bash shell用法小记

shell的使用博大精深,,本人梳理基础知识,整理一下简单的用法,具体的请因需求自行研究。


1. 计算
# echo $((1+2))
3
# echo $((1+2+3))
6
# echo 3+2+5 |bc
10



2. if的用法
if [ $i -eq 0 ]; then
    xxx
else
    xxx
fi

整数比较:
-eq 等于,如:if [ "$a" -eq "$b" ]   
-ne 不等于,如:if [ "$a" -ne "$b" ]   
-gt 大于,如:if [ "$a" -gt "$b" ]   
-ge 大于等于,如:if [ "$a" -ge "$b" ]   
-lt 小于,如:if [ "$a" -lt "$b" ]   
-le 小于等于,如:if [ "$a" -le "$b" ]   
<   小于(需要双括号),如:(("$a" < "$b"))   
<=  小于等于(需要双括号),如:(("$a" <= "$b"))   
>   大于(需要双括号),如:(("$a" > "$b"))   
>=  大于等于(需要双括号),如:(("$a" >= "$b")) 

字符串比较:
通常是这样做的:
if [ X"$test" = X"test" ]

= 等于,如:if [ "$a" = "$b" ]   

-d 目录
-e 存在
-f 文件
-n 非空字符串
-z 空字符串

 

3. for的用法
array1=("d.com" "e.com" "f.com")
len=${#array1[@]}

for ((i=0;i<$len;i++))
do
    echo ${array1[$i]}
done

for a in $(seq 1 100);do
    echo $a
    sleep 1s
done


4. case的用法
case $1 in
    start|stop|reload)
        $1
        ;;
    *)
        echo "Usage: $0 [start|stop|reload]"
        ;;
esac


5. while的用法
while true
do
    echo "abc"
    read -p "请输入: " abc
    ddd="$abc"
    if [ ${#ddd} -ne 5 ]; then
        echo "请重新输入!!!"
    else
        break
    fi
done

6. 参数
#
#  $0 是这个bash文件的名称;
#  $? 是上一指令的返回值;
#  $* 是该脚本调用的所有参数;
#  $@ 基本与上面的$*相同。区别是:
#      $* 返回的是一个字符串,字符串中用空格分隔开,而 $@ 则返回多个字符串;
#  $# 是所有位置参数的个数;
#
#
ab=($(ls))
echo "1: "${ab[@]}
echo "2: "${#ab[@]}

echo "3: "$@
echo "4: "$#
echo "5: "$?


7. 正则
 正则表达式匹配"=~"
 [[ $XX =~ ^$XXX ]] 
The =~ Regular Expression matching operator within a double brackets test expression.

$ [[ "# test2" =~ ^# ]] && echo yes || echo no
yes


8. 截取字符串

假设有:
f="/a/b/c/d/e.name.ext"

则:
# basename $f
e.name.ext
# dirname $f    
/a/b/c/d

特殊用法:利用${}中的#,%,*来输出指定的内容
1)去掉第一个/,以及左边的字符串 
# echo ${f#*/}
a/b/c/d/e.name.ext

2)去掉最后1个/,以及左边的字符串
# echo ${f##*/}
e.name.ext

3)去掉最后一个/,以及右边的字符串
# echo ${f%/*} 
/a/b/c/d

4)去掉第一个/,以及右边的字符串
# echo ${f%%/*} 
(空)

上面,是根据“/”来做分割,也可以用“."来分隔,不妨一试。
# echo ${f#*.} 
name.ext
# echo ${f##*.}
ext
# echo ${f%.*} 
/a/b/c/d/e.name
# echo ${f%%.*}
/a/b/c/d/e


9. 脚本放入后台,输出到日志
sh test.sh >1.log 2>&1 &
sh test.sh >/dev/null 2>&1 &
这里需要理解几个小东西的作用:
/dev/null   理解成空设备,这是一个特殊的文件,这里的作用是丢弃输出的内容
2>&1        0 输入  1 输出  2 错误 这里是将2重定向到1
&           将test.sh放入后台执行,请思考,还有其他的什么方式也可以将程序放入后台?


10. 管道
通过“|” 把输出导入到另一个程序的输入中去处理,例如:
echo ‘abc, def‘ |cut -d ‘,‘ -f 1


11. 命令跟踪调试
sh -x test.sh


12. 快捷键
Ctrl + a 切换到命令行开始
Ctrl + b - Move back a char
Ctrl + c 终止命令
Ctrl + d 退出shell,logout
Ctrl + e 切换到命令行末尾
Ctrl + l 清除屏幕内容
Ctrl + k 剪切清除光标之后的内容
ctrl + q 恢复刷屏
Ctrl + r 在历史命令中查找
ctrl + s 可用来停留在当前
Ctrl + u 清除剪切光标之前的内容
Ctrl + y 粘贴刚才所删除的字符
Ctrl + z 转入后台运行
!! 重复执行最后一条命令
↑(Ctrl+p) 显示上一条命令
↓(Ctrl+n) 显示下一条命令
!$ 显示系统最近的一条参数


13. shell传递中文到python出现异常
export LANG="en_US.UTF-8";
/usr/local/bin/python3  xxx.py


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。