shell学习
Shell是一个命令行解释器,它为用户提供了一个向[Linux]内核发送请求以便运行程序的界面系统程序,用户可以用Shell来启动,挂起,停止甚至编写一些程序。
脚本执行方式
1.0 基本语法
-
定义变量 变量名=值
-
撤销变量 uset 变量名
-
声明静态变量: readOnly变量,注意,静态变量不能unset。
-
可将变量提升为全局环境变量,可供其他Shell程序使用
[注:
-
变量名可以由字母,数字,下划线组成,不能以数字开头
-
等号两侧不能有空格
-
变量名习惯大写
-
可以将命令的返回值赋给变量,但是需要用 反引号
`将命令括起来。 如 A=
date` [这里运行里面的命令,并把结果返回给变量A] 也可写成 A=$(date )]
-
1.1 设置环境变量
export 变量名=变量值 (将Shell变量输出为环境变量 ) source 配置文件 (让修改后的配置信息立即生效 ,如 source /etc/profile) echo $变量名 (查询环境变量的值)
1.2 注释
-
单行注释 : #
-
多行注释 :
:>>! [ 注: 至少占三行]
这是注释内容
*********
*********
!
1.3 位置参数变量
-
$ n ( n代表数字, $0 代表命令本身,$1代表第一个参数, $2代表第二个参数,十以及以上的参数需要用到大括号包含,如 ${10} )
-
$*(这个变量代表命令行中的所有参数, $ *把所有参数看成一个整体 。且去掉命令本身 。要区别于$@ ,)
-
$@(代表命令行中所有参数,不过$@把每个参数分区对待,且去掉命令本身)
-
$#(代表命令行所有的参数个数)
-
$$(代表脚本当前运行的进程PID)
1.4 预定义变量
介绍:Shell设计者实现已经定义好的变量,可以直接在Shell脚本中使用 基本语法:
-
$$(当前进程号PID)
-
$!(后台运行的最后一个进程的进程号)
-
$?(最后一侧执行命令返回的状态,如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体是那个数,由命令自己来决定),证明上一个命令执行不正确)
1.5运算符
基本语法:
-
$((运算式)) 或者$[运算式]或者 exper m + n [即expersion表达式]
-
注意 expersion表达式运算符之间要有空格,如果希望 expr结果赋予某个变量,使用反引号``
-
expr 中需要的特殊符号 expr * ,/,%
用例:
1.6条件判断
判断语句
-
比较字符串 =
-
按文件权限来判断 -r 有读权限 -w有写权限, -x 有执行权限
-
按文件类型判断 -f 文件存在且是一个常规文件 -e文件存在 -d 文件存在一个目录
-
整数比较
-
-lt 小于
-
-le 小于等于于
-
-gt 大于
-
-ge 大于等于
-
-qe 等于
-
-ne 不等于
-
二、流程控制
2.0 if语句
if [ 条件判断式 ]
then
语句
else
语句
fi
或者,采用下列方式 >>>>>>>>>
if [ 条件判断式 ]
then
代码
elif[ 条件判断式 ]
then
代码
fi
[>>>> 注:中括号与条件判断式之间必须有空格 ]
102 a=10
103 b=20
104
105 if [ $a != $b ]
106 then
107 echo a != b
108 else
109 echo a == b
110 fi
111
112 if [[ $a -gt 100 && $b -gt 100 && $a != $b ]] #逻辑运算符要带两个方括号
113 then
114 echo a 和 b gt100
115 else
116 echo a 和b lt 100
117 fi
2.1 case语句
case $变量名 in
"值1")
如果符合条件,就执行这里的代码
;;
"值2")
如果符合条件,就执行这里的代码
;;
*) #类似于C语言的default
如果变量的值都不是以上的值,则执行这里的代码
;;
esac
#例子:命令行执行脚本时,输入一个数字,然后程序输出对应的一个字符串
152 case $1 in
153
154 "1")
155 echo 111
156 ;;
157 "2")
158 echo 222
159 ;;
160 "3")
161 echo 333
162 ;;
163 *)
164 echo other
165 ;;
166 esac
2.2循环控制语句
for 循环
for 变量 in 值1,值2,值3
do
代码
done
########################################
或者
for (( 初始值;循环控制条件;变量变化))
do
代码
done
##############################################
sum=0
for(( i=1; i<=100; i++))
do
sum=$[$sum+$i]
done
echo $sum
##############################################
sum=0
sum1=1
sum2=2
for i in {1..10}
do
sum=`expr $i + $sum`
sum1=$[$sum1+$i]
sum2=$(($sum2+$i))
done
echo $sum
echo $sum1
echo $sum2
################################
while 循环
while [ 条件判断式 ]
do
程序
done
#################################