三、Linux——Shell脚本语言

xiaoxiao2021-02-28  87

【1】shell的三种类型

shell 命令 shell 命令解释器 shell 脚本:shell命令的有序集合

【2】创建

1、创建一个以.sh结尾的文件 2、赋予可执行权限 3、执行

【3】chmod

rw- rw- r-- 二进制 110 110 100 八进制 6 6 4 chmod 776 1.sh

【4】变量

1--- 用户自定义变量 1、没有类型 2、赋值时等号两边禁止有空格 3、echo "$A" 2--- 位置变量 $0... ...$n(两位以上要加花括号 ${10}) 命令行的位置参数 3--- 预定义变量 $* $@ :所有命令行参数,除第一个以外 $# :命令行参数的个数,除第一个以外 $$ :PID $? :与上一条shell命令有关 1、承接上一条命令的执行状态 成功$?= 0 2、用于测test语句的结果真$?=0,假$?=1 3、承接函数的返回值 4--- 环境变量 $HOME

【5】功能语句

1--- read从标准输入读入一行,并依次赋值给后面的变量 剩余的数据甩给最后一个变量 2--- expr + - \* / % \( \) 1、表达式的格式 `expr $A + 1` 2、运算符两边必须留有空格 3--- test 0、测试的结果使用$?承接 1、测字符串 = :是否等于 != :是否不等 -z :是否为空 -n :是否为非空 2、测整数 -eq -ne -gt -ge -lt -le 相等 不等 大于 大于等于 小于 小于等于 3、文件 1>文件类型 linux b c d - l s p shell -b -c -d -f -L -S -p 2>权限 用户本身的权限 -r -w -x 3>其他 -e name 测试一个文件是否存在 -s name 测试name文件是否存在且不为空 f2 -nt f2 测试文件f1 是否比文件f2 更新 f2 -ot f2 测试文件f1 是否比文件f2更旧 4>test 可以用[]替代,注意与数据保留一个空格

【6】if

if 表达式 then 命令表 fi ******************* if 表达式 then 命令表1 else 命令表2 fi ******************* if 表达式 then 命令表1 elif 表达式 then 命令表2 else 命令表3 fi

【7】case

case 变量 in 模式1) 命令表1 ;; 模式2|3) 命令表2 ;; *) 命令表n ;; esac

【8】while

while 命令或表达式 do 命令表 done for 变量名 in 单词表 do 命令表 done

【10】函数

function function_name ( ) { command1 …… commandn } 1、function 是关键字 2、调用:function_name arg1 arg2 arg3 3、参数:$1 …… $n 4、返回:return $val //返回值是整数 5、$? 承接函数的返回值 6、变量默认是全局的,local使其变为局部的

【11】

-o or或 -a and与 exit 结束程序

源码及注释

1、1_val.sh

#! /bin/bash #注释 A=hello #赋值=两边不能有空格 echo "A = $A" #取值要用$ #命令行参数 echo "\$0 = $0" echo "\$1 = $1" echo "\$2 = $2" echo "\$10 = ${10}" #两位以上要加花括号 #预定义变量 echo "\$* = $*" #除第一个参数后面的所有 echo "\$@ = $@" #同上 echo "\$# = $#" #除第一个参数的个数 echo "\$$ = $$" #进程PID echo "\$? = $?" #承接上一条命令的执行结果,正确输出0

2、2_read.sh

#! /bin/bash #read 从标准输入读入一行,并依次赋值给后面的变量 #剩余数据甩给最后一个变量 read A B C echo "A = $A" echo "B = $B" echo "C = $C" read D E echo "D = $D" echo "E = $E"

3、3_expr.sh

#! /bin/bash #计算表达式 expr格式 A=10 A=`expr $A + 10 \* 2` #``tab键上方位置 符号两边留有空格需要 echo "A = $A" read A A=`expr \( $A + $1 \) \* 2` #*、()需要转义符号 echo "A = $A"

4、4_test_char.sh

#! /bin/bash A=hello B=hello test $A = $B echo "\$1 = $?" #AB是否相等 test $A != $B #AB是否不等 echo "\$2 = $?" test $A = "HELLO" echo "\$3 = $?" test -n $A #是否非空 echo "\$4 = $?" test -z $A #是否空 echo "\$5 = $?" C="" test -z $C echo "\$6 = $?"

5、5_test_int.sh

#! /bin/bash A=10 B=12 test $A -eq $B echo "\$?1 = $?" test $A -ne $B echo "\$?2 = $?" test $A -lt $B echo "\$?3 = $?" test $A -gt $B echo "\$?4 = $?" test $A -le $B echo "\$?5 = $?" test $A -ge $B echo "\$?6 = $?"

6、6_test_file.c

#! /bin/bash test -d . echo "\$?1 = $?" >8.sh test -f ./8.sh echo "\$?2 = $?" ln -s 8.sh link test -d link echo "\$?3 = $?" test -w 8.sh echo "\$?4 = $?" [ -x 8.sh ] echo "\$?5 = $?" [ 1.sh -nt 8.sh ] echo "\$?6 = $?" rm ./8.sh ./link

7、7_if.sh

#! /bin/bash read A if [ $A -gt 100 -o $A -lt 0 ] then echo "error" exit fi if [ $A -le 100 -a $A -ge 90 ] then echo "A" fi if [ $A -le 89 -a $A -ge 80 ] then echo "B" fi if [ $A -le 79 -a $A -ge 70 ] then echo "C" fi if [ $A -le 69 -a $A -ge 60 ] then echo "D" fi if [ $A -le 59 -a $A -ge 0 ] then echo "E" fi echo "end"

8、8_elif.sh

#! /bin/bash read A if [ $A -eq 0 ] then echo "等于0" elif [ $A -gt 0 ] then echo "大于0" else echo "小于0" fi

9、9_case.sh

#! /bin/bash read A case $A in H|h) echo "hello" ;; W|w) echo "world" ;; O) echo "other" ;; *) echo "**" ;; esac

10、10_case_sorce.sh

#! /bin/bash read A if [ $A -gt 100 -o $A -lt 0 ] then exit fi A=`expr $A / 10` case $A in 10|9) echo "A" ;; 8) echo "B" ;; 7) echo "C" ;; 6) echo "D" ;; *) echo "E" ;; esac

11、11_while.sh

#! /bin/bash A=6 while [ $A -gt 0 ] do A=`expr $A - 1` if [ $A -eq 2 ] then # break continue fi echo "A = $A" sleep 1 done B=10 while [ $B -ne 0 ] do >file$B.txt B=`expr $B - 1` done

12、12_for_in.sh

#! /bin/bash i=0 for A in hello world beijing shanghai do echo "A = $A" i=`expr $i + 1` done echo "i = $i"

13、13_for_MAX.sh

#! /bin/bash MAX=$1 for A in $@ //巧用预定义变量 do if [ $MAX -lt $A ] then MAX=$A fi done echo "MAX = $MAX"

14、14_for_cp.sh

#! /bin/bash #1、创建一个目录dir,存在则提示exist 不存在则创建 #2、将当前路径下所有的普通文件拷贝到dir #3、将拷贝的文件名记录在1.txt文件内 if [ -d dir ] #判断文件夹是否存在 then echo "exist" else mkdir dir fi for file in `ls` #巧用命令置换,ls结果当参数 do if [ -f $file ] then cp $file dir echo "$file" >> 1.txt fi done

15、15_fun.sh

#! /bin/bash function fun() #声明一个函数 { local A=8 # A=8 默认全局,local A=8 局部 echo "fun" echo "\$0 = $0" echo "\$1 = $1" echo "\$@ = $@" echo "\$# = $#" return $A } fun world beijing 123 #传参 echo "\$? = $?" echo "A = $A"
转载请注明原文地址: https://www.6miu.com/read-80293.html

最新回复(0)