Shell编程快速入门指南
第一个shell脚本#!/bin/bash echo "hello,world" 运行程序可以作为解释器参数或者作为可执行程序 bash test.sh chmod +x test.sh test.sh 变量命名 name="huruji" 需要注意的是变量名与等号之间不能有空格。 使用echo $name echo ${name} 使用在变量名前添加$即可,{}表示这个变量名的边界。 只读变量 name="huruji" readonly name 使用readonly可以将变量定义为只读变量,只读变量不能再次赋值 删除变量 name="huruji" unset name 使用unset删除变量,之后不能再使用。 字符串name="huruji" echo "my name is $name" 字符串可以使用单引号和双引号,单引号中不能包含单引号,即使转义单引号也不次那个,双引号则可以,双引号也可以使用字符串。 拼接 name="huruji" hello="my name is ${name}" 获取字符串长度 str="huruji" echo ${#str} #6 提取子字符串 str="huruji" echo ${str:2:3} 从字符串的第二个字符开始提取3个字符,输出ruj 查找 str="huruji" echo `expr index "$str" u` 此时输出2,因为此时第一个字符位置从1开始 数组定义 names=("huruji" "greywind" "xie") echo ${names[0]} echo ${names[2]} 读取 echo ${names[2]} echo ${names[@]} 如上例子,使用@可以获取数组中的所有元素 获取长度 length=${#names[@]} length=${#names[*]} Shell参数传递执行Shell脚本的时候,可以向脚本传递参数,在Shell中获取这些参数的格式为$n,即$1,$2......., echo "第一个参数是:$1" echo "第一个参数是:$2" echo "第一个参数是:$3" 运行 chmod +x test.sh test.sh 12 13 14 则此时输出: 第一个参数是:12 第一个参数是:13 第一个参数是:14 此外,还有其他几个特殊字符来处理参数
运算算数运算 val=`expr 2 + 2` echo $val 需要注意的是运算符两边需要空格,且使用的是反引号。 关系运算 a=12 b=13 if [ $a -eq $b ] then echo "相等" else echo "不等" fi
布尔运算
逻辑运算符
字符串运算符
文件测试运算符
file="/home/greywind/Desktop/learnShell/test.sh" if [ -e $file ] then echo "文件存在" else echo "文件不存在" fi if [ -r $file ] then echo "可读" else echo "不可读" fi if [ -w $file ] then echo "可写" else echo "不可写" fi if [ -x $file ] then echo "可执行" else echo "不可执行" fi if [ -d $file ] then echo "是目录" else echo "不是目录" fi if [ -f $file ] then echo "是普通文件" else echo "不是普通文件" fi echoecho在显示输出的时候可以省略双引号,使用read命令可以从标准输入中读取一行并赋值给变量 read name echo your name is $name 换行使用转义n,不换行使用c echo "it is a test" > "/home/greywind/Desktop/learnShell/hello" 使用反引号可以显示命令执行的结果,如date、history、pwd echo `pwd` echo `date` printfShell中的输出命令printf类似于C语言中的printf(), printf format-string [arguments...] printf "%-10s %-8s %-4sn" 姓名 性别 体重kg printf "%-10s %-8s %-4.2fn" 郭靖 男 66.1234 printf "%-10s %-8s %-4.2fn" 杨过 男 48.6543 printf "%-10s %-8s %-4.2fn" 郭芙 女 47.9876 testtest命令用于检查某个条件是否成立,可以进行数值、字符、文件三方面的测试 a=100 b=200 if test a == b then echo "相等" else echo "不等" fi 流程控制if a=100 b=200 if test $a -eq $b then echo "相等" else echo "不等" fi a=100 b=200 if test $a -eq $b then echo "相等" elif test $a -gt $b then echo "a大于b" elif test $a -lt $b then echo "a小于b" fi for for num in 1 2 3 4 do echo ${num} done num=10 for((i=1;i<10;i++)); do ((num=num+10)) done echo $num while num=1 while [ $num -lt 100 ] do ((num++)) done echo $num 无限循环 while: do command done while true do command done for (( ; ; )) until until condition do command done case case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac 需要注意的是与其他语言不同Shell使用;;表示break,另外没有一个匹配则使用*捕获该值 echo "输入1 2 3任意一个数字" read num case $num in 1)echo "输入了1" ;; 2)echo "输入了2" ;; 3)echo "输入了3" ;; *)echo "输入的值不是1 2 3" ;; esac 与其他语言类似,循环可以使用break和continue跳出 函数函数定义 function first(){ echo "hello world" } first(){ echo "hello world" } 调用函数直接使用这个函数名即可 first 函数参数 function add(){ num=0; for((i=1;i<=$#;i++)); do num=`expr $i + $num` done return $num } add 1 2 3 4 5 a=$? echo $a 函数本身是一个命令,所以只能通过$?来获得这个返回值 输入输出重定向在上文的例子中可以使用 > 可以将echo结果写入指定文件,这就是一种输出重定向,重定向主要有以下:
将whoami命令输出保存到user文件中 who > "./user" 使用cat命令就可以看到内容已经保存了,如果不想覆盖文件的内容那么就使用追加的方式即可。 who >> "./user" Shell文件包含Shell脚本可以包含外部脚本,可以很方便的封装一些公用的代码作为一个独立的文件,包含的语法格式如下: . filename # 或 source filename 如: echo "hello world" test.sh source ./test1.sh echo "hello" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |