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文件的名称; # $? 是上一指令的返回值; # $* 是该脚本调用的所有参数; # [email protected] 基本与上面的$*相同。区别是: # $* 返回的是一个字符串,字符串中用空格分隔开,而 [email protected] 则返回多个字符串; # $# 是所有位置参数的个数; # # ab=($(ls)) echo "1: "${ab[@]} echo "2: "${#ab[@]} echo "3: "[email protected] 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
时间: 2024-10-05 05:21:22