- 释放变量
unset 变量名
[root@192 ~]# name='k thy'
[root@192 ~]# echo name
name
[root@192 ~]# echo $name
k thy
[root@192 ~]# unset name
[root@192 ~]# echo $name
[root@192 ~]#
- 单引号和双引号的区别
单引号:不会解析字符串中的变量名
双引号:会解析字符串中的变量名(如果不需要解析那么可以在$符号前加上反斜杠\)
[root@192 ~]# name='kathy'
[root@192 ~]# n1="China$name"
[root@192 ~]# echo $n1
Chinakathy
[root@192 ~]# n2='China$name'
[root@192 ~]# echo $n2
China$name
[root@192 ~]# n3="China\$name"
[root@192 ~]# echo $n3
China$name
- 反单引号
解析shell的命令
root@192 ~]# n4=`ll`
[root@192 ~]# echo $n4
总用量 108 -rw-------. 1 root root 3368 11月 7 2017 anaconda-ks.cfg -rw-r--r--. 1 root root 41918 11月 7 2017 install.log -rw-r--r--. 1 root root 17340 11月 7 2017 install.log.syslog drwxr-xr-x 2 root root 4096 12月 17 2017 公共的 drwxr-xr-x 2 root root 4096 12月 17 2017 模板 drwxr-xr-x 2 root root 4096 12月 17 2017 视频 drwxr-xr-x 2 root root 4096 12月 17 2017 图片 drwxr-xr-x 2 root root 4096 12月 17 2017 文档 drwxr-xr-x 2 root root 4096 5月 22 07:41 下载 drwxr-xr-x 2 root root 4096 12月 17 2017 音乐 drwxr-xr-x 6 root root 4096 5月 12 08:05 桌面
[root@192 ~]#
[root@192 桌面]# sh script01.sh
data first-1 judy kathy one script01.sh
[root@192 桌面]# cat script01.sh
#!/bin/bash
com=`ls`
echo $com
[root@192 桌面]#
- 如果文件权限不够没有执行权限
[root@192 桌面]# /bin/bash script01.sh
data first-1 judy kathy one script01.sh
[root@192 桌面]# sh script01.sh
data first-1 judy kathy one script01.sh
[root@192 桌面]# ./script01.sh
bash: ./script01.sh: 权限不够
[root@192 桌面]# chmod +x script01.sh
[root@192 桌面]# ./script01.sh
data first-1 judy kathy one script01.sh
文件执行的3种方式
1) sh 文件名.sh
2) /bin/bash 文件名.sh
3) 给文件添加可执行权限,./文件名.sh
- 统计文件夹内文件的个数
[root@192 first]# sh script02.sh
一共有3个文件
[root@192 first]# cat script02.sh
#!/bin/bash
# cd /root/桌面/kathy/first
filenum=`ls|wc -l`
echo "一共有$filenum个文件"
[root@192 first]#
- read的用法,实现键盘录入
[root@192 first]# read a b
kathy John
[root@192 first]# echo $a
kathy
[root@192 first]# echo $b
John
/root/桌面/kathy/fourth
一共有1个文件
[root@192 first]# cat script03.sh
#!/bin/bash
read dir
cd $dir
filenum=`ls|wc -l`
echo "一共有$filenum个文件"
read -p “提示信息” 变量名
[root@192 first]# sh script03.sh
请输入目录:/root/桌面/kathy/fourth
一共有1个文件
[root@192 first]# cat script03.sh
#!/bin/bash
read -p "请输入目录:" dir
cd $dir
filenum=`ls|wc -l`
echo "一共有$filenum个文件"
- 参数传递
[root@192 first]# sh script04.sh /fourth #参数和文件名,参数和参数之间用空格隔开
一共有1个文件
[root@192 first]# cat script04.sh
#!/bin/bash
#read -p "请输入目录:" dir
cd /root/桌面/kathy$1 #$1表示接收第一个传递过来的参数,同理$2,$3,$4表示第2,3,4个参数
filenum=`ls|wc -l`
echo "一共有$filenum个文件"
$0 接受的是执行文件的文件名
$& 接受的是所有的参数
$# 接受的是参数的个数
- 重定向(将命令的查询结果输出到指定文件中,而不是在终端显示)
1)正确的命令
命令 1>要写入的文件名: 覆盖式写入
命令 1>>要写入的文件名: 追加式写入
[root@192 first]# ls 1>a.txt
[root@192 first]# ll
总用量 16
-rw-r--r-- 1 root root 0 5月 9 07:26 3.txt
-rw-r--r-- 1 root root 0 5月 9 07:26 4.txt
-rw-r--r-- 1 root root 54 5月 24 07:54 a.txt
-rw-r--r-- 1 root root 95 5月 24 07:01 script02.sh
-rw-r--r-- 1 root root 105 5月 24 07:23 script03.sh
-rw-r--r-- 1 root root 122 5月 24 07:34 script04.sh
[root@192 first]# cat a.txt
3.txt
4.txt
a.txt
script02.sh
script03.sh
script04.sh
[root@192 first]# ll 1>>a.txt
[root@192 first]# cat a.txt
3.txt
4.txt
a.txt
script02.sh
script03.sh
script04.sh
总用量 16
-rw-r--r-- 1 root root 0 5月 9 07:26 3.txt
-rw-r--r-- 1 root root 0 5月 9 07:26 4.txt
-rw-r--r-- 1 root root 54 5月 24 07:54 a.txt
-rw-r--r-- 1 root root 95 5月 24 07:01 script02.sh
-rw-r--r-- 1 root root 105 5月 24 07:23 script03.sh
-rw-r--r-- 1 root root 122 5月 24 07:34 script04.sh
[root@192 first]# ll 1>a.txt
[root@192 first]# cat a.txt
总用量 12
-rw-r--r-- 1 root root 0 5月 9 07:26 3.txt
-rw-r--r-- 1 root root 0 5月 9 07:26 4.txt
-rw-r--r-- 1 root root 0 5月 24 07:59 a.txt
-rw-r--r-- 1 root root 95 5月 24 07:01 script02.sh
-rw-r--r-- 1 root root 105 5月 24 07:23 script03.sh
-rw-r--r-- 1 root root 122 5月 24 07:34 script04.sh
[root@192 first]#
2)错误的命令
命令 2>要写入的文件名: 覆盖式写入
命令 2>>要写入的文件名: 追加式写入
[root@192 first]# cd hfshdkjakjd 2>b.txt
[root@192 first]# cat b.txt
bash: cd: hfshdkjakjd: 没有那个文件或目录
[root@192 first]# ll dfhjhefhh 2>>b.txt
[root@192 first]# cat b.txt
bash: cd: hfshdkjakjd: 没有那个文件或目录
ls: 无法访问dfhjhefhh: 没有那个文件或目录
[root@192 first]#
8.判断某个文件夹是否为空
[root@192 first]# sh script05.sh
请输入路径/a
0
空
[root@192 first]# sh script05.sh
请输入路径/third
2
有文件
[root@192 first]# cat script05.sh
#!/bin/bash
read -p "请输入路径" filep
cd /root/桌面/kathy$filep
dir=`ls|wc -l`
echo $dir
if [ "$dir" = "0" ]
then
echo "空"
else
echo "有文件"
fi
[root@192 first]#
[root@192 Desktop]# sh script01.sh /root/Desktop
3
not empty
[root@192 Desktop]# ls
1.txt kathy script01.sh
[root@192 Desktop]# cat script01.sh
#!/bin/bash
path=$1
cd $path
dir=`ls|wc -l`
echo $dir
if [ $dir == 0 ]
then
echo "empty"
else
echo "not empty"
fi
- 判断用户输入的用户名和密码
[root@192 Desktop]# sh script02.sh
请输入用户名和密码admin 123456
用户名正确
密码正确
恭喜登录成功
[root@192 Desktop]# sh script02.sh
请输入用户名和密码ad 123456
用户名错误
密码正确
用户名或密码错误,登录失败
[root@192 Desktop]# sh script02.sh
请输入用户名和密码admin 12
用户名正确
密码错误
用户名或密码错误,登录失败
[root@192 Desktop]# cat script02.sh
#!/bin/bash
read -p "请输入用户名和密码" name password
if [ $name = "admin" ]
then echo "用户名正确"
else echo "用户名错误"
fi
if [ $password = "123456" ]
then echo "密码正确"
else echo "密码错误"
fi
if [ $name = "admin" -a $password = "123456" ]
then echo "恭喜登录成功"
else echo "用户名或密码错误,登录失败"
fi
[root@192 Desktop]#
- 变量的运算
[root@192 Desktop]# sh script04.sh 2 3
2<3
[root@192 Desktop]# sh script04.sh 2 2
2==2
[root@192 Desktop]# sh script04.sh 3 2
3>2
[root@192 Desktop]# cat script04.sh
#!/bin/bash
num1=$1
num2=$2
if [ $num1 -eq $num2 ]
then echo "$num1==$num2"
elif [ $num1 -gt $num2 ]
then echo "$num1>$num2"
else echo "$num1<$num2"
fi
- 判断用户输入的目录是否存在,如果存在则统计目录下的个数,否则提示用户该目录不存在
[root@192 Desktop]# sh script05.sh /root/Desktop
该目录下一共有7个文件
[root@192 Desktop]# sh script05.sh /root/Desktop/kathy
该目录下一共有0个文件
[root@192 Desktop]# sh script05.sh script04.sh
这是一个普通文件
[root@192 Desktop]# cat script05.sh
#!/bin/bash
dir=$1
if [ -e $dir ]
then
if [ -d $dir ]
then
cd $dir
filenum=`ls|wc -l`
echo "该目录下一共有$filenum个文件"
else
echo "这是一个普通文件"
fi
else
echo "文件不存在"
fi
[root@192 Desktop]# sh script05.sh judy
文件不存在
- case应用于区间
[root@192 kathy]# sh script07.sh
请输入服务评价,0-3不满意,4-6满意,7-9非常满意3
unhappy
[root@192 kathy]# sh script07.sh
请输入服务评价,0-3不满意,4-6满意,7-9非常满意9
very happy
[root@192 kathy]# cat script07.sh
#!/bin/bash
read -p "请输入服务评价,0-3不满意,4-6满意,7-9非常满意" feedback
case $feedback in
[0-3]) echo "unhappy";;
[4-6]) echo "happy";;
[7-9]) echo "very happy";;
esac
- for循环输出10以内的数字(start开始点,size间隔,max结束值)
格式:
for iseq start开始点,size间隔,max结束值
[root@192 kathy]# sh script09.sh
1
2
3
4
5
6
7
8
9
10
[root@192 kathy]# cat script09.sh
#!/bin/bash
for i in `seq 1 1 10`
do echo $i
done
- while循环求和
[root@192 kathy]# sh script10.sh
5050
[root@192 kathy]# cat script10.sh
#!/bin/bash
i=1
l=0
while ((i<=100))
do
let l=l+i
let i++
done
echo $l
- 函数的传参
[root@192 kathy]# sh add.sh 20 25
20+25=45
[root@192 kathy]# cat add.sh
#!/bin/bash
add(){
a=$1
b=$2
let c=a+b
echo "$a+$b=$c"
}
add $1 $2
- 函数的默认返回值
[root@192 kathy]# sh hell0.sh
hello world
0
[root@192 kathy]# cat hell0.sh
#!/bin/bash
hello(){
echo "hello world"
}
hello
echo $? #如果函数没有问题那么返回0
[root@192 kathy]# sh hell0.sh
hello world
hell0.sh: line 4: cd: /xxx: 没有那个文件或目录
1
[root@192 kathy]# cat hell0.sh
#!/bin/bash
hello(){
echo "hello world"
cd /xxx
}
hello
echo $? #有问题返回1
- 输入一个目录,判断目录是否存在,如果不存在则给出提示,如果存在则提示输入要创建的文件名,判断创建的文件是否存在,如果不存在,则继续创建,否则提示该文件存在。
[root@192 kathy]# sh createdoc.sh
请输入要创建文件的目录:/xxx
该目录不存在
[root@192 kathy]# sh createdoc.sh
请输入要创建文件的目录:/root/桌面/kathy
请输入要创建的文件名newfile.sh
[root@192 kathy]# ls
3.txt a first first-1-1 fourth hello.sh index.html.1 script01.sh second.zip test02.sh third
4.txt createdoc.sh first-1 first.tar hell0.sh index.html newfile.sh second test01.sh test03.txt
[root@192 kathy]# sh createdoc.sh
请输入要创建文件的目录:/root/桌面/kathy
请输入要创建的文件名newfile.sh
文件已经存在
[root@192 kathy]# cat createdoc.sh
#!/bin/bash
#输入一个目录
read -p "请输入要创建文件的目录:" dir
#判断目录是否存在
if [ -d $dir ]
then
cd $dir
read -p "请输入要创建的文件名" file
if [ ! -e $file ]
then
touch $file
else
echo "文件已经存在"
fi
else
echo "该目录不存在"
fi