shell基础之符号与语法
#! /bin/bash int_val=312 char_val='a' float_val=3.12 string_val="aaaaaa" echo $int_val echo $char_val echo $float_val echo $string_val echo $int_val'+'$char_val'+'$string_val'+'$float_val' echo ${char_val}a$int_val运行结果例如以下:
由上图运行结果能够看出:我们所依赖的解释器就是bash,同一时候shell脚本中定义使用变量而且连接几个不同的变量远比我们使用c/c++实现方便多了!
shell脚本中规定:变量使用前不须要定义类型,须要使用的变量由用户自己定义 。shell脚本下默认全部的变量均为字符串类型,所以我们就能够依据自己的需求进行字符串的连接,如上代码所看到的。连接过程中仅仅须要使用‘+’号或须要的字符就可以。
以下详细从shell的符号和shell的语法来学习记忆。
一.shell符号
1.当你写好一个shell标本后,如何无运行这个脚本的到自己所须要的结果呢?
答:有几种方法:(1)给脚本加上可运行的权限:chmod +x +文件名称 ,然后运行 ./+文件名称就可以
(2)/bin/bah +文件名称
(3)source ./+文件名称
(4) . ./+文件名称
2.shell中有哪些变量呢?
答:按类型能够分为本地变量和环境变量,能够使用env查看当前系统中的全部环境变量。而本地变量仅仅存在于当前shell进程中,我们能够使用set命令来查看当前shell进程中全部的变量(包含本地变量和环境变量)。
这里与举一个样例:
(1)在当前shell中定义一个变量:value=100(注意这里等号两边都不能有空格。不然会被shell解释成命令和命令行參数)
(2)使用export能够导出这个变量到环境变量中
(3)使用env查看该命令就可以
例如以下图所看到的
(4)使用unset能够删除已定义的环境变量或者本地变量
3.shell怎引用变量?
答:如刚開始举得样例一般,定义变量不须要类型,取变量的值时仅仅需使用$+变量名就可以
4.我们怎么拿到本文件夹下全部符合条件的呢?
答:在这里。我们就提到了通配符,常见的通配符有:*、?
、[],分别解释例如以下:
(1)*:匹配0或者多个随意字符
(2)?:匹配一个随意字符
(3)[]:匹配方括号里随意一个字符的一次出现
样例例如以下:
5.如何使用命令代换?
答:命令代换就是shell先运行符号内的命令,然后将输出结果马上代换到当前命令行中。
例如以下样例:
#! /bin/bash DATE=`date` echo $DATE
#! /bin/bashDATE=$(date)echo $DATE
6.转义字符在建立文件的时候怎么使用?
答:一般文件名称随用户定义。但当你想touch一个名为$ $的文件的时候,转移字符就派上用场了。
7.shell脚本中的单引號和双引號有共同点?
答:shell脚本中,单引號和双引號都仅仅是保持字符的字面意思,也就是说不正确字符的内容进行解释。
二.shell基本的语法
1.条件測试
c语言中条件推断用的是if语句,而在shell脚本中,经常使用的两种条件測试命令时test和[.測试结果为真返回0。为假返回1(与语言的返回条件刚好相反)。以下是一些測试样例:
(1)
#! /bin/bash read val test $val -gt 10 echo $?运行结果例如以下:[ $val -gt 10 ] echo $?
当然除使用命令測试之外,命令也能够增加參数进行推断:
(2)
#! /bin/bash read input [ -d $input ] echo $? [ -f $input ] echo $? [ -z $input ] echo $?运行结果例如以下:[ -n $input ] echo $?</span>
(3)字符串的推断
#! /bin/bah str1="i am boy" str2="t am gilr" [ "X$str1" == "X$str2" ]
echo $? 一般字符串在做比較的时候。习惯在字符串中增加X防止空串出现
当然,測试命令之间还能够进行与或非逻辑运算。上面所比較的字符串的方法就是当中的一个样例
使用的语法为:[ 測试条件 -a 測试条件]
[!測试条件]
[ 測试条件 -o 測试条件]
#! /bin/bash str1="i am a beautiful girl" [ -f test.sh -a "X$str1" == "i am a beautiful girl" ] echo $?运行结果为1 。
2.if/then/elif/fi这个就相当于我们C语言中if语句,样例例如以下:
#! /bin/bash read sex if [ "Xsex" == "Xman" ];then echo "you are a boy elif [ "Xsex" == "Xwoman" ] echo "you are a girl" else echo "say nothing" fi
可是在这里,必须注意,if语句和fi之间不能有空语句,能够用:隔开,表示总是为真。样例例如以下:
#! /bin/bash read input if [ -d $input ];then echo "$input is dir" fi if : ;then echo "/ is always true" fi除此之外,shell脚本还提供了&& 和||命令。它的作用相当于if...then /if ...not then(样例例如以下)
#! /bin/bash val=10 [ $val -eq 10 ] && { echo "you are right" exit 0 } echo "not true" [ $val -eq 10 ] || { echo "not true" exit 1 } echo "you are right“3.case /esac它就相当于c语言中的switch语句。样例例如以下:
#! /bin/bash read val case $val in a) service iptables start echo "start" ;; b) service iptables stop echo "stop" ;; c) service iptables restart echo "restart" ;; esac上述代码中的;;符号就类似于switch语句中的break。
4.循环语句,shell脚本下的循环语句与c语言的循环语句非常不同样,样例例如以下:
#! /bin/bash for i in $@ do echo "$i" done
#! /bin/bash for(( i=0; i<100; i++ )) do echo "$i" done
当然另外一种方法就比較类似于c语言的写法啦!
5.while/ do/done,样例例如以下:
#! /bin/bash echo "printf 1+1=?6.位置參数和特殊变量" read val while [ $val -eq 2 ] do echo "you are a smart man" done
(1)$0:表示命令行上可运行文件的文件名称
(2)$1、$2.....:表示命令行上的參数1,參数2 等等
(3)$@:表示參数列表
(4)$#:表示命令行參数的个数
(5)$?:表示当前进程的退出码
(6)$():表示命令替换
(7)$$:表示shell的进程号
7.函数:shell脚本中,函数一般先定义,定义的时候不写
參数和返回值,调用的时候仅仅需写出函数名就好。一般程序是从函数调用的地方运行的。
(样例例如以下)
#! /bin/bash function fool() { echo "smart" } fool如上样例所看到的:shell脚本中是没有函数声明的,一般将函数定义能够写在脚本开头。
整个函数仅仅在以下条用的时候起作用。
8.数组:shell脚本如C语言一样也是支持顺序訪问下标元素的。一般在初始化数组元素的时候中间以空格隔开(样例例如以下)
#! /bin/bash arr=("hello" 123 3.14) i=0 for (( ; i<${#arr[@]}; ++i)) do echo ${arr[$i]} done
在上面这个样例中,表达式${#arr[@}是计算数组元素的个数的。模拟使用了C方式的书写格式,终于打印出来数组的元素。