当前位置:   article > 正文

Linux系统编程----Shell篇_linux 高级shell 编程

linux 高级shell 编程

目录

知识点1:shell概述

知识点2:shell的三种执行方式

知识点3:运行shell脚本文件问题解决

知识点4:shell脚本分类

知识点5:shell变量

1、定义变量

2、案例1:

3、清除变量

4、只读变量

5、从键盘获得输入

6、环境变量

7、注意事项

知识点5:预设变量

预设变量案例

知识点6:脚本变量的特殊用法

脚本变量案例

转义字符案例

()和{}的区别

知识点7:条件测试语句

1、文件测试

2、字符串测试

知识点8:控制语句

1、if控制语句

2、case 控制语句

3、for 控制语句

4、declare

5、while控制语句

6、unitl控制语句

7、break & continue

break案例

continue案例

知识点9:函数

1、同一个文件函数调用

2、不同文件函数调用

3、函数调用值返回


知识点1:shell概述

既是一种应用程序,又是一种程序设计语言,解释语言

shell是用户和Linux内核之间的接口程序

0

知识点2:shell的三种执行方式

如果是没有可执行权限

chmod +x 01_shell.sh

1、 ./01_shell.sh //子shell里执行,#!指定的解析器解析,如果没指定,使用系统默认

2、. 01_shell.sh //当前shell里执行,#!指定的解析器解析和系统默认不同,采用系统默认的解析器

3、bash 01_shell.sh //子shell里执行,bash解析器优先级高于#!后指定的解析器

知识点3:运行shell脚本文件问题解决

安装 dos2unix

sudo apt install dos2unix

1、使用dos2unix转换文件格式

dos2unix XX_SHELL.sh

2、用vim打开文件,在命令行模式下:

set ff=unix

知识点4:shell脚本分类

1、配置文件/etc/profile,所有用户有效

2、~/.bashrc  ,当前用户有效

知识点5:shell变量

1、定义变量

变量名=变量值

引用变量

$变量

2、案例1:

  1. #!/bin/bash
  2. num=100
  3. echo "num=$num"

3、清除变量

使用unset命令清除变量

unset  varname
  1. #!/bin/bash
  2. num=100
  3. echo "num=$num"
  4. unset num
  5. echo "num=$num"

4、只读变量

  1. #!/bin/bash
  2. readonly num=100
  3. echo "num=$num"
  4. num=1000
  5. echo "num=$num"

5、从键盘获得输入

read string:从键盘输入一个字符串付给变量string

  1. #!/bin/bash
  2. read -p "请输入数据:" data
  3. echo "data=$data"

6、环境变量

查看系统环境变量:env

export var=300

使用export说明的变量,会被导出为环境变量,其它shell均可使用

7、注意事项

变量名只能包含英文字母下划线,不能以数字开头,定义变量时“=”两边不能有空格

  1. #!/bin/bash
  2. export DATA=1000

通过env也能查看到设置的环境变量

env>a.txt

知识点5:预设变量

  1. $#:传给shell脚本参数的数量
  2. $*:传给shell脚本参数的内容
  3. $1、$2、$3、...、$9:运行脚本时传递给其的参数,用空格隔开
  4. $?:命令执行后返回的状态
  5. "$?"用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)。
  6. $0:当前执行的进程名
  7. $$:当前进程的进程号
  8. "$$"变量最常见的用途是用作临时文件的名字以保证临时文件不会重复

预设变量案例

  1. #!/bin/bash
  2. echo "参数个数:$#"
  3. echo "参数内容:$*"
  4. echo "参数1:$1"
  5. echo "参数2:$2"
  6. echo "参数3:$3"
  7. echo "参数4:$4"
  8. echo "进程名:$0"
  9. echo "进程号:$$"
  10. read data

知识点6:脚本变量的特殊用法

  1. ""(双引号):包含的变量会被解释
  2. ''(单引号):包含的变量会当做字符串解释
  3. ``(数字键1左面的反引号):反引号中的内容作为系统命令,并执行其内容,可以替换输出为一个变量
  4. \ 转义字符:同c语言 \n \t \r \a等 echo命令需加-e转义
  5. (命令序列):由子shell来完成,不影响当前shell中的变量
  6. { 命令序列 }:在当前shell中执行,会影响当前变量

脚本变量案例

  1. #指定解析器
  2. #!/bin/bash
  3. #查看当前目录下的文件
  4. #echo "当前目录下有哪些文件:`ls -a`"
  5. #查看当前进程
  6. echo "当前进程:`ps -a`"

转义字符案例

  1. #!/bin/bash
  2. echo -e "1234354545\tbcded"
  3. echo -e "########\n#########"

()和{}的区别

  1. #!/bin/bash
  2. num=100
  3. (
  4. #子shell num=500 echo "()内的num=$num"
  5. )
  6. echo "()外的num=$num"
  7. {
  8. num=1000 echo "{}内的num=$num"
  9. }
  10. echo "{}外的num=$num"

知识点7:条件测试语句

test condition  或[ condition ]

1、文件测试

  1. -e 是否存在    -d 是目录 -f 是文件
  2. -r 可读        -w 可写 -x 可执行
  3. -L 符号连接    -c 是否字符设备 -b是否块设备
  4. -s 文件非空
  1. #!/bin/bash
  2. read -p "请输入文件名:" filename
  3. test -e $filename
  4. #条件表达式1
  5. echo "$?"
  6. [ -d $filename ]
  7. #条件表达式2
  8. echo "$?"

2、字符串测试

  1. test str_operator “str”
  2. test “str1” str_operator “str2”
  3. [ str_operator “str” ]
  4. [ “str1” str_operator “str2”]
  5. 其中str_operator可以是:
  6. = 两个字符串相等   != 两个字符串不相等
  7. -z 空串            -n 非空串
  1. #!/bin/bash
  2. read -p "请输入字串1: " str1
  3. read -p "请输入字串2: " str2
  4. test -z $str1 #空串
  5. echo "$?"
  6. test -n $str2 #非空
  7. echo "$?"
  8. [ $str1 = $str2 ] #串1和串2相等
  9. echo "$?"
  10. [ $str1 != $str2 ] #串1和串2相等
  11. echo "$?"

3、数字测试

测试数值格式如下:

  1. test num1 num_operator num2
  2. [ num1 num_operator num2 ]
  3. num_operator可以是:
  4. -eq 数值相等   
  5. -ne 数值不相等
  6. -gt 数1大于数2    
  7. -ge 数1大于等于数2
  8. -le 数1小于等于数2
  9. -lt 数1小于数2
  1. #!/bin/bash
  2. read -p "请输入数字1: " num1
  3. read -p "请输入数字2: " num2
  4. [ $num1 -gt $num2 ]
  5. echo "$?"
  6. [ $num1 -le $num2 ]
  7. echo "$?"

4、复合测试

命令执行控制:

&&:

        command1 && command2

        &&左边命令(command1)执行成功(即返回0)shell才执行&&右边的命令(command2)

||

        command1 || command2

        ||左边的命令(command1)未执行成功(即返回非0)shell才执行||右边的命令(command2)

  1. #!/bin/bash
  2. read -p "请输入数字(50~100): " num
  3. [ $num -ge 50 -a $num -le 100 ]
  4. echo "$?"
  5. read -p "请输入文件: " file
  6. [ -d $file -o -e $file ]
  7. echo "$?"

知识点8:控制语句

1、if控制语句

格式一:

  1. if [条件1]; then
  2. 执行第一段程序
  3. else
  4. 执行第二段程序
  5. fi

格式二:

  1. if [条件1]; then
  2. 执行第一段程序
  3. elif [条件2];then
  4. 执行第二段程序
  5. else
  6. 执行第三段程序
  7. fi
  1. #!/bin/bash
  2. read -p "请输入一个分数: " num
  3. if [ $num -ge 60 -a $num -lt 80 ];then
  4. echo "合格"
  5. elif [ $num -ge 80 -a $num -lt 90 ];then
  6. echo "良好"
  7. elif [ $num -ge 90 -a $num -le 100 ];then
  8. echo "优秀"
  9. else
  10. echo "不合格"
  11. fi

2、case 控制语句

case 控制语句格式

  1. case $变量名称 in
  2. “第一个变量内容”) 程序段一
  3. ;; //break
  4. “第二个变量内容”) 程序段二
  5. ;; //brak;
  6. *) //default
  7. 其它程序段
  8. exit 1
  9. esac
  1. #!/bin/bash
  2. read -p "请输入一个分数(10分制) " num
  3. case $num in
  4. 0|1|2|3|4|5)
  5. echo "不合格"
  6. ;;
  7. 6)
  8. echo "合格"
  9. ;;
  10. 7|8)
  11. echo "良好"
  12. ;;
  13. 9|10)
  14. echo "优秀"
  15. ;;
  16. *)
  17. echo "无效分数"
  18. exit 1
  19. esac

3、for 控制语句

形式一:

  1. for (( 初始值; 限制值; 执行步阶 ))
  2. do
  3. 程序段
  4. done

形式二:

  1. for var in con1 con2 con3 ...
  2. do
  3. 程序段
  4. done

4、declare

是bash的一个内建命令,可以用来声明shell变量、设置变量的属性。declare也可以写作typeset。

  1. declare -i s 代表强制把s变量当做int型参数运算。
  2. #!/bin/bash
  3. declare -i i
  4. declare -i sum
  5. for ((i=0;i<=100;i++))
  6. do
  7. sum=$sum+$i;
  8. done
  9. echo "sum=$sum"

扫描文件夹下的所有文件

  1. #!/bin/bash
  2. for file in `ls`
  3. do
  4. echo "$file"
  5. done

5、while控制语句

  1. while [ condition ]
  2. do
  3. 程序段
  4. done
  1. #!/bin/bash
  2. declare -i i=0
  3. declare -i sum=0
  4. while [ $i -le 100 ]
  5. do
  6. sum=$sum+$i
  7. i=$i+1
  8. done
  9. echo "sum=$sum"

6、unitl控制语句

  1. until [ condition ]
  2. do
  3. 程序段
  4. done

这种方式与while恰恰相反,当condition成立的时候退出循环,否则继续循环。

  1. #!/bin/bash
  2. declare -i i=0
  3. declare -i sum=0
  4. until [ $i -gt 100 ]
  5. do
  6. sum=$sum+$i
  7. i=$i+1
  8. done
  9. echo "sum=$sum"

7、break & continue

  • break:
  • 命令允许跳出循环。
  • break 通常在进行一些处理后退出循环或case 语句
  • continue:
  • continue 命令类似于break 命令
  • 只有一点重要差别,它不会跳出循环,只是跳过这个循环步骤

break案例

  1. #!/bin/bash
  2. declare -i i=0
  3. declare -i sum=0
  4. while [ $i -le 100 ]
  5. do
  6. if [ $i -eq 50 ];then
  7. break
  8. fi
  9. sum=$sum+$i
  10. i=$i+1
  11. done
  12. echo "sum=$sum"

continue案例

  1. #!/bin/bash
  2. declare -i i=0
  3. declare -i sum=0
  4. while [ $i -lt 100 ]
  5. do
  6. i=$i+1
  7. if [ $i -eq 50 ];then
  8. continue
  9. fi
  10. sum=$sum+$i
  11. done
  12. echo "sum=$sum"

知识点9:函数

格式一:

函数名() { 命令 ... }

格式二:

function 函数名() { 命令 ... }

1、同一个文件函数调用

  1. #!/bin/bash #函数的定义
  2. declare -i sum=0 #将变量sum强制转换成整型
  3. function my_add() {
  4. sum=$1+$2
  5. echo "sum=$sum"
  6. } #函数的调用
  7. my_add 10 20

2、不同文件函数调用

19_shell.sh (函数定义)

  1. #!/bin/bash #函数的定义
  2. declare -i sum=0 #将变量sum强制转换成整型
  3. function my_add() {
  4. sum=$1+$2
  5. echo "sum=$sum"
  6. }

20_shell.sh(函数调用)

  1. #!/bin/bash
  2. source 19_shell.sh #函数的调用
  3. my_add 50 50

3、函数调用值返回

函数调用:

  1. #!/bin/bash
  2. source 19_shell.sh #函数的调用
  3. my_add 50 50
  4. echo "sum=$?"

函数定义:

  1. #!/bin/bash #函数的定义
  2. declare -i sum=0 #将变量sum强制转换成整型
  3. function my_add() {
  4. sum=$1+$2
  5. #echo "sum=$sum"
  6. return $sum
  7. }
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号