Shell入门
Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序,用户可以用Shell来启动,挂起,停止甚至编写一些程序。
脚本执行方式
在国内,BashShell脚本开头必须以 #!/bin/bash 开头 。下述文件命名为 hello.sh。
#!/bin/bash
echo "hello_world"
方式1:输入脚本的绝对路径或相对路径。说明:需要使用 chmod u+x 赋予 xxx.sh脚本权限,再能执行脚本。如 ./hello.sh 运行输出
方式2:sh xxx.sh。 说明:不需要赋予脚本 +x 权限,直接执行即可。
ps:去掉权限 chmod u-x xxx.sh
一、Shell变量
分类:系统变量 与 用户自定义变量
系统变量有 $HOME, $PWD, $SHELL, $USER等等, set命令可以显示当前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} )
- $ * (这个变量代表命令行中的所有参数, $ *把所有参数看成一个整体 。且去掉命令本身 。要区别于$@ ,)
- $@ (代表命令行中所有的参数,不过 $@ 把每个参数区分对待,且去掉命令本身 )
- @# ( 代表命令行中所有参数的个数 )
1.4 预定义变量
介绍:Shell设计者实现已经定义好的变量,可以直接在Shell脚本中使用
基本语法:
- $$ (当前进程号PID)
- $! (后台运行的最后一个进程的进程号)
- $? (最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0 (具体是哪个数,由命令自己来决定 ),证明上一个命令执行不正确了 )
1.5 运算符
基本语法:
- $((运算式)) 或者 $[运算式] 或者 expr m + n 【即expresion表达式 】
- 注意 expresion表达式运算符之间要有空格,如果希望 expr的结果赋予某个变量,使用``反引号
- expr中需用到的特殊符号 expr * , / , % 【 乘,除,取余 】
#!/bin/bash
result1=$(((2+3)*4))
echo $result1
result2=$[(2+3)*4]
echo $result2
temp=`expr 2 + 3`
result3=`expr $temp \* 5 `
echo $result3
#注意 sum=$[$1+$2]
sum=$[$1+$2]
echo $sum
1.5 条件判断
判断语句:
- 比较字符串 =
- 整数比较 -lt 小于 -le 小于等于 -gt 大于 -ge 大于等于 -ne 不等于 【 中间要有空格 】
- 按文件权限来判断 -r 有读的权限, -w 有写的权限 , -x 有执行的权限
- 按文件类型进行判断 -f 文件存在且是一个常规文件 -e 文件存在 -d 文件存在且是一个目录
二、流程控制
2.0 if语句
语法:
if [ 条件判断式 ]
then
代码
fi
或者,采用下列方式 >>>>>>>>>
if [ 条件判断式 ]
then
代码
elif[ 条件判断式 ]
then
代码
fi
[>>>> 注:中括号与条件判断式之间必须有空格 ]
#!/bin/bash
if [ "okei" = "ok" ]
then
echo "equal"
fi
if [ 23 -gt 10 ]
then
echo "大于!"
fi
if [ -f /root/shellCode/idf.sh ]
then
echo "存在"
fi
2.1 case语句
case $变量名 in
"值1")
如果符合条件,就执行这里的代码
;;
"值2")
如果符合条件,就执行这里的代码
;;
*)
如果变量的值都不是以上的值,则执行这里的代码
;;
esac
# 例子:命令行执行脚本时,输入一个数字,然后程序输出对应的一个字符串。
#!/bin/bash
case $1 in
'1')
echo "Monday"
;;
'2')
echo "Wednesday"
;;
*)
echo "oher"
;;
esac
2.2 循环控制
for 循环
for 变量 in 值1,值2,值3
do
代码
done
或者
for (( 初始值;循环控制条件;变量变化))
do
代码
done
# 循环求得 1到100的累加和
#!/bin/bash
sum=0
for(( i=1; i<=100; i++))
do
sum=$[$sum+$i]
done
echo $sum
while 循环
while [ 条件判断式 ]
do
程序
done
#!/bin/bash
sum=0
i=0
while [ $i -le $1 ]
do
sum=$[$sum + $i]
i=$[$i+1]
done
echo $sum