执行一个shell文件
# 也可用绝对路径
[root@localhost shell]# ./myShell.sh
hello,world
shell变量
-
系统变量 $PATH $USER 等
echo "PATH=$PATH" echo "user=$USER"
-
用户自定义变量 A=100,readonly 静态变量不能unset
A=100 echo "A=$A" unset A echo "A=$A" #静态变量 readonly A=99 echo "A=$A" unset A #报错 echo "A=$A"
等号两边不能有空格
变量名称一般大写
命令输出值给变量
# 第一种``
RESULT=`ls -l /home`
echo $RESULT
echo ""
# 第二种$()
MY_DATE=$(date)
echo "date=$MY_DATE"
设置环境变量
- 定义变量 TOMCAT=/opt/tomcat
- export [TOMCAT] 导出全局变量
- source /etc/profile 使其生效
位置参数变量
- $n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数用{}包起来
- $* 把所有参数当成一个整体
- $@ 把每个参数区分对待
- $# 统计参数个数
预定义变量
- $$ 当前进程的pid
- $! 后台运行的最后一个进程号
- $? 最后一次执行的命令的返回状态
#!/bin/bash
echo "当前pid=$$"
#后台的方式运行 myShell.sh
./myShell.sh &
echo "最后的进程号=$!"
echo "执行结果=$?"
运算符
#!/bin/bash
# 第一种方式
RESULT1=$(((2+3)*4))
echo "result1=$RESULT1"
# 第二种方式 ****推荐****
RESULT2=$[(2+3)*4]
echo "result2=$RESULT2"
# 第三种expr
TEMP=`expr 2 + 3`
RESULT3=`expr $TEMP \* 4`
echo "RESULT3=$RESULT3"
条件判断
#!/bin/bash
#1. "ok"是否等于"ok" 字符串相等判断是 = ,数字是 -eq
if [ "ok" = "ok" ]
then
echo "equal"
fi
#2. 23是否大于等于22
if [ 23 -gt 22 ]
then
echo "大于"
fi
#3. 判断/root/shell/aaa.txt 文件是否存在
if [ -e /root/shell/aaa.txt ]
then
echo "存在"
fi
流程控制
- if elif
#!/bin/bash
if [ $1 -ge 60 ]
then
echo "及格"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
- case
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
- for
#!/bin/bash
#打印命令行输入的参数
#使用$* 整体处理
for i in "$*"
do
echo "th num is $i"
done
echo "****************"
#使用$@ 分开处理
for j in "$@"
do
echo "the num is $j"
done
#!/bin/bash
# 求1-100的和
SUM=0
for((i=1;i<=100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum=$SUM"
- while
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
read 读取控制台参数
#! /bin/bash
#读取控制台输入一个num
read -p "请输入一个数num1=" NUM1
echo "输入的值是num1=$NUM1"
#读取控制台输入一个num,要求10秒内输入
read -t 10 -p "请输入一个数num2=" NUM2
echo "输入的值是num2=$NUM2"
函数
-
系统函数
basename命令会删掉所有前缀"/"之前的字符,显示后面部分
[root@localhost shell]# basename /home/aaa/test.txt test.txt # 去掉后缀 [root@localhost shell]# basename /home/aaa/test.txt .txt test
dirname 返回路径最后"/"前面的部分,与basename相反
[root@localhost shell]# dirname /home/aaa/test.txt /home/aaa
-
自定义函数
#!/bin/bash function getSum(){ SUM=$[$n1+$n2] echo "和是=$SUM" } read -p "请输入第一个数n1" n1; read -p "请输入第二个数n2" n2; #调用函数 getSum $n1 $n2