Linux — Shell
发布日期:2021-06-30 19:49:58 浏览次数:2 分类:技术文章

本文共 5205 字,大约阅读时间需要 17 分钟。

1、第一个shell 脚本

2、安装bashdb

第一步:下载适合自己bash version 的bashdb ()

第二步:解压并进入解压后的目录

第三步:配置 ./configure

第四步:编译并安装 make && make install 

注意:配置和编译安装要在root 用户在进行

第五步:验证 bashdb --debug

第六步:使用shell调试器bashdb

使用shell调试器bashdb,这是一个类似于GDB的调试工具,可以完成对shell脚本的断点设置,单步执行,变量观察等许多功能。

使用bashdb进行debug的常用命令

1.列出代码和查询代码类:

l 列出当前行以下的10行

- 列出正在执行的代码行的前面10行

. 回到正在执行的代码行

w 列出正在执行的代码行前后的代码

/pat/ 向后搜索pat

2.Debug控制类:

h 帮助

help 命令 得到命令的具体信息

q 退出bashdb

x 算数表达式 计算算数表达式的值,并显示出来

!!空格Shell命令 参数 执行shell命令

使用bashdb进行debug的常用命令(cont.)

控制脚本执行类:

n 执行下一条语句,遇到函数,不进入函数里面执行,将函数当作黑盒

s n 单步执行n次,遇到函数进入函数里面

b 行号n 在行号n处设置断点

d 行号n 撤销行号n处的断点

c 行号n 一直执行到行号n处

R 重新启动

Finish 执行到程序最后

cond n expr 条件断点

3、判断

3.1 if判断结构

[hadoop@master shell]$ vi t1.sh        echo "B"#!/bin/bashecho -n "input:"read SCOREif [ "$SCORE" -lt 60 ]; then        echo "C"fiif [ "$SCORE" -lt 80 -a "$SCORE" -ge 60 ]; then        echo "B"fiif [ "$SCORE" -ge 80 ]; then        echo "A"fi
3.2 if/else 判断结构

[hadoop@master shell]$ vi t2.sh#!/bin/bashFILE01=~/shell/t1.shFILE02=/home/hadoop/shell/t3.shif [ -e $FILE01 ]; then        echo "$FILE01 EXISTS"else        echo "$FILE01 NOT EXISTS"fiif [ -e $FILE02 ]; then        echo "$FILE02 EXISTS"else        echo "$FILE02 NOT EXISTS"fi
3.3 if/elif/else 

[hadoop@master shell]$ vi t3.sh  1 #!/bin/bash  2 echo -n "input:"  3 read SCORE  4   5 if [ "$SCORE" -lt 60 ]; then  6         echo "C"  7 else  8         if [ "$SCORE" -ge 60 -a "$SCORE" -lt 80 ]; then  9                 echo "B" 10         else 11                 if [ "$SCORE" -ge 80 ]; then 12                         echo "A" 13                 fi 14         fi 15 fi
3.4 case

[hadoop@master shell]$ vi t4.sh  1 #!/etc/bash  2 OS=`uname -s`  3 case "$OS" in  4 FreeBSD) echo "FreeBSD" ;;  5 SunOS) echo "Solaris" ;;  6 Darwin) echo "Mac OSX" ;;  7 Linux) echo "Linux" ;;  8 Minix) echo "Minix" ;;  9 *) echo "Failed" ;; 10 esac
[hadoop@master shell]$ vi t5.sh  1 #!/bin/bash  2 read -p "give me a word:" input  3 case $input in  4         *[[:lower:]]*) echo -en "L" ;;  5         *[[:upper:]]*) echo -en "U" ;;  6         *[[:digit:]]*) echo -en "N" ;;  7         *) echo "unknow" ;;  8 esac
4、循环

4.1 带列表的for循环

[hadoop@master shell]$ vi t6.sh  1 #!/bin/bash  2 fruits="apple orange banana pear"  3 for F in ${fruits}  4 do  5         echo "$F"  6 done  7 echo "no more"
[hadoop@master shell]$ vi t7.sh  1 #!/bin/bash  2 sum=0  3 for v in {1..5}  4 do  5         let "sum+=v"  6 done  7 echo "$sum"  8   9 sum=0 10 #for v in `seq 1 10` 11 for v in $(seq 1 10) 12 do       13         let "sum+=v" 14 done  15 echo "$sum"~
[hadoop@master shell]$ vi t8.sh  1 #!/etc/bash  2 for v in `ls`  3 do  4         #echo "$v"  5         ls -l $v  6 done

4.2  while按行读取

# awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

[hadoop@master shell]$ vi t1.sh  1 #!/bin/bash  2 cat stu_info.txt | while read LINE  3 do  4         NAME=`echo $LINE | awk '{print $1}'`  5         AGE=`echo $LINE | awk '{print $2}'`  6         SEX=`echo $LINE | awk '{print $3}'`  7         echo "my name is $NAME, I am $AGE years old, I am a $SEX"  8 done

# way1while ((1))do         echo "study study study"done# way 2while truedo        echo "linux linux linux"done # way 3while :do         echo "shell shell shell"done

[hadoop@master shell]$ vi t3.sh  1 #!/bin/bash  2 i=1  3 while [[ "$i" -le "9" ]]  4 do  5         j="$i"  6         while [[ "$j" -le "9" ]]  7         do  8                 let "multi=$i*$j"  9                 echo -n "$i*$j=$multi " 10                 let "j+=1" 11         done 12         echo 13         let "i+=1" 14 done
# 4.3 循环控制
[hadoop@master shell]$ vi t4.sh  1 #!/bin/bash  2 for ((i=1; i<=9; i++))  3 do  4         for ((j=1; j<=9; j++))  5         do  6                 if [[ $j -le $i ]]; then  7                         let "multi=$i*$j"  8                         echo -n "$i*$j=$multi "  9                 else 10                         break 11                 fi 12         done 13         echo 14 done

[hadoop@master shell]$ vi t5.sh  1 #!/bin/bash  2 for ((i=1; i<=100; i++))  3 do  4         for ((j=2; j
5 函数

5.1 位置参数

[hadoop@master shell]$ vi t6.sh  1 #!/bin/bash  2 function multi(){  3         let "RESULT=$1*$2"  4         echo $RESULT  5 }  6 multi $1 $2
5.2 指定脚本位置参数值

# 一旦使用set设置了传入参数的之,脚本将忽略运行时传入的位置参数

[hadoop@master shell]$ vi t7.sh  1 #!/bin/bash  2 set a b c d  3 COUNT=1  4 for i in $@  5 do  6         echo "\$$COUNT IS $i"  7         let "COUNT++"  8 done

5.3 移动位置参数

shift 将位置参数整体向左移动 x 个位置

[hadoop@master shell]$ vi t8.sh  1 #!/bin/bash  2 until [ $# -eq 0 ]  3 do  4         echo "\$1:$1 -> total: $#"  5         shift  6 done
5.4 递归函数

我们可以这样理解汉诺塔问题:要将A上的n个盘子按照要求移动到C上,我们可以想到:先将上边的 n-1 个盘子移动到B上,再将A上剩余的最大的盘子移动到C上,然后将B上所有的盘子移动到C上

[hadoop@master shell]$ vi t9.sh  1 #!/bin/bash  2 function hanoi() {  3         local num=$1  4         if [ "$num" -eq "1" ]; then  5                 echo "move $2 -> $4"  6         else  7                 hanoi $((num-1)) $2 $4 $3  8                 echo "move $2 -> $4"  9                 hanoi $((num-1)) $3 $2 $4 10         fi 11 } 12  13 hanoi 4 A B C~
6 I/O 重定向

6.1 标准输出覆盖重定向: >

6.2 标准输出追加重定向: >>

(输出的去向)

6.3 标识输出重定向: >&

标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)

eg:xxx > xxx.txt 2>&1

6.4 标准输入重定向: <

(输入的来源)

6.5 管道

将一个命令的输出作为另一个命令的输入

转载地址:https://lipenglin.blog.csdn.net/article/details/50651316 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:算法 — 最基础のc语言算法
下一篇:Linux — Ubuntu(主机) ssh 免密码登录到 centos(虚拟机)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月23日 16时02分23秒