【1】shell的三种类型
shell 命令
shell 命令解释器
shell 脚本:shell命令的有序集合
【2】创建
1、创建一个以.sh结尾的文件
2、赋予可执行权限
3、执行
【3】chmod
rw- rw- r--
二进制 110 110 100
八进制 6 6 4
chmod 776 1.sh
【4】变量
1--- 用户自定义变量
1、没有类型
2、赋值时等号两边禁止有空格
3、echo "$A"
2--- 位置变量
$0... ...$n(两位以上要加花括号 ${10})
命令行的位置参数
3--- 预定义变量
$* $@ :所有命令行参数,除第一个以外
$# :命令行参数的个数,除第一个以外
$$ :PID
$? :与上一条shell命令有关
1、承接上一条命令的执行状态 成功$?= 0
2、用于测test语句的结果真$?=0,假$?=1
3、承接函数的返回值
4--- 环境变量
$HOME
【5】功能语句
1--- read从标准输入读入一行,并依次赋值给后面的变量
剩余的数据甩给最后一个变量
2--- expr
+ - \* / % \( \)
1、表达式的格式 `expr $A + 1`
2、运算符两边必须留有空格
3--- test
0、测试的结果使用$?承接
1、测字符串
= :是否等于
!= :是否不等
-z :是否为空
-n :是否为非空
2、测整数
-eq -ne -gt -ge -lt -le
相等 不等 大于 大于等于 小于 小于等于
3、文件
1>文件类型
linux b c d - l s p
shell -b -c -d -f -L -S -p
2>权限
用户本身的权限
-r -w -x
3>其他
-e name 测试一个文件是否存在
-s name 测试name文件是否存在且不为空
f2 -nt f2 测试文件f1 是否比文件f2 更新
f2 -ot f2 测试文件f1 是否比文件f2更旧
4>test 可以用[]替代,注意与数据保留一个空格
【6】if
if 表达式
then
命令表
fi
*******************
if 表达式
then
命令表1
else
命令表2
fi
*******************
if 表达式
then
命令表1
elif 表达式
then
命令表2
else
命令表3
fi
【7】case
case 变量 in
模式1)
命令表1
;;
模式2|3)
命令表2
;;
*)
命令表n
;;
esac
【8】while
while 命令或表达式
do
命令表
done
for 变量名 in 单词表
do
命令表
done
function function_name ( )
{
command1
……
commandn
}
1、function 是关键字
2、调用:function_name arg1 arg2 arg3
3、参数:$1 …… $n
4、返回:return $val //返回值是整数
5、$? 承接函数的返回值
6、变量默认是全局的,local使其变为局部的
-o or或
-a and与
exit 结束程序
1、1_val.sh
#! /bin/bash
#注释
A=hello #赋值=两边不能有空格
echo "A = $A" #取值要用$
#命令行参数
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$10 = ${10}" #两位以上要加花括号
#预定义变量
echo "\$* = $*" #除第一个参数后面的所有
echo "\$@ = $@" #同上
echo "\$# = $#" #除第一个参数的个数
echo "\$$ = $$" #进程PID
echo "\$? = $?" #承接上一条命令的执行结果,正确输出0
2、2_read.sh
#! /bin/bash
#read 从标准输入读入一行,并依次赋值给后面的变量
#剩余数据甩给最后一个变量
read A B C
echo "A = $A"
echo "B = $B"
echo "C = $C"
read D E
echo "D = $D"
echo "E = $E"
3、3_expr.sh
#! /bin/bash
#计算表达式 expr格式
A=10
A=`expr $A + 10 \* 2` #``tab键上方位置 符号两边留有空格需要
echo "A = $A"
read A
A=`expr \( $A + $1 \) \* 2` #*、()需要转义符号
echo "A = $A"
4、4_test_char.sh
#! /bin/bash
A=hello
B=hello
test $A = $B
echo "\$1 = $?" #AB是否相等
test $A != $B #AB是否不等
echo "\$2 = $?"
test $A = "HELLO"
echo "\$3 = $?"
test -n $A #是否非空
echo "\$4 = $?"
test -z $A #是否空
echo "\$5 = $?"
C=""
test -z $C
echo "\$6 = $?"
5、5_test_int.sh
#! /bin/bash
A=10
B=12
test $A -eq $B
echo "\$?1 = $?"
test $A -ne $B
echo "\$?2 = $?"
test $A -lt $B
echo "\$?3 = $?"
test $A -gt $B
echo "\$?4 = $?"
test $A -le $B
echo "\$?5 = $?"
test $A -ge $B
echo "\$?6 = $?"
6、6_test_file.c
#! /bin/bash
test -d .
echo "\$?1 = $?"
>8.sh
test -f ./8.sh
echo "\$?2 = $?"
ln -s 8.sh link
test -d link
echo "\$?3 = $?"
test -w 8.sh
echo "\$?4 = $?"
[ -x 8.sh ]
echo "\$?5 = $?"
[ 1.sh -nt 8.sh ]
echo "\$?6 = $?"
rm ./8.sh ./link
7、7_if.sh
#! /bin/bash
read A
if [ $A -gt 100 -o $A -lt 0 ]
then
echo "error"
exit
fi
if [ $A -le 100 -a $A -ge 90 ]
then
echo "A"
fi
if [ $A -le 89 -a $A -ge 80 ]
then
echo "B"
fi
if [ $A -le 79 -a $A -ge 70 ]
then
echo "C"
fi
if [ $A -le 69 -a $A -ge 60 ]
then
echo "D"
fi
if [ $A -le 59 -a $A -ge 0 ]
then
echo "E"
fi
echo "end"
8、8_elif.sh
#! /bin/bash
read A
if [ $A -eq 0 ]
then
echo "等于0"
elif [ $A -gt 0 ]
then
echo "大于0"
else
echo "小于0"
fi
9、9_case.sh
#! /bin/bash
read A
case $A in
H|h)
echo "hello"
;;
W|w)
echo "world"
;;
O)
echo "other"
;;
*)
echo "**"
;;
esac
10、10_case_sorce.sh
#! /bin/bash
read A
if [ $A -gt 100 -o $A -lt 0 ]
then
exit
fi
A=`expr $A / 10`
case $A in
10|9)
echo "A"
;;
8)
echo "B"
;;
7)
echo "C"
;;
6)
echo "D"
;;
*)
echo "E"
;;
esac
11、11_while.sh
#! /bin/bash
A=6
while [ $A -gt 0 ]
do
A=`expr $A - 1`
if [ $A -eq 2 ]
then
# break
continue
fi
echo "A = $A"
sleep 1
done
B=10
while [ $B -ne 0 ]
do
>file$B.txt
B=`expr $B - 1`
done
12、12_for_in.sh
#! /bin/bash
i=0
for A in hello world beijing shanghai
do
echo "A = $A"
i=`expr $i + 1`
done
echo "i = $i"
13、13_for_MAX.sh
#! /bin/bash
MAX=$1
for A in $@ //巧用预定义变量
do
if [ $MAX -lt $A ]
then
MAX=$A
fi
done
echo "MAX = $MAX"
14、14_for_cp.sh
#! /bin/bash
#1、创建一个目录dir,存在则提示exist 不存在则创建
#2、将当前路径下所有的普通文件拷贝到dir
#3、将拷贝的文件名记录在1.txt文件内
if [ -d dir ] #判断文件夹是否存在
then
echo "exist"
else
mkdir dir
fi
for file in `ls` #巧用命令置换,ls结果当参数
do
if [ -f $file ]
then
cp $file dir
echo "$file" >> 1.txt
fi
done
15、15_fun.sh
#! /bin/bash
function fun() #声明一个函数
{
local A=8 # A=8 默认全局,local A=8 局部
echo "fun"
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$@ = $@"
echo "\$# = $#"
return $A
}
fun world beijing 123 #传参
echo "\$? = $?"
echo "A = $A"