Linux 脚本

五、执行脚本:sh脚本编辑与执行
SHELL简介:
负责执行命令的机制就是shell。
shell还可以用来进行程序设计。
它提供了定义变量和参数的手段以及丰富的程序控制结构。同PL/SQL块逻辑
使用shell编程类似于DOS中批处理文件,称为shell script,又叫shell程序或shell命令文件。
SEHLL分类:
Shell名称 开发者 命令名称
Bourne S.R.Bourne /bin/sh
C Bill Joy /bin/csh
Korn David /bin/ksh
每个人在成功登陆linux后,系统会出现不同的提示符号,例如$、~、#等,然后就可以开始输入需要的命令,若是命令正确,系统就会依据命令的要求来执行,直到注销系统为止;在登录到注销期间,输入的每个命令都会经过解释及执行。而这个负责的机制就是shell。作为命令语言互动式地解释和执行用户输入的命令只是shell功能的一个方面。shell还可以用来进行程序设计。它提供了定义变量和参数的手段以及丰富的程序控制结构。使用shell编程类似于DOS中批处理文件,称为shell script,又叫shell程序或shell命令文件。
不同的Shell语言的语法有所不同,所以不能交换使用。
SHELL使用:
1、shell命令使用
命令历史和互动:用上下箭头键可以重复以前所输入的命令。
命令完成功能:用tab键能自动完成相关命令,再次按tab可得到清单。
[Ctrl]+c 中断当前命令的组合键。
[Ctrl]+d 键盘输入结束,可以用来取代exit的输入。
2、shell脚本文件:
是一个文本文件;命令的集合;有执行的权限;执行方式(./文件名);用户登录后自动执行的shell脚本文件
SHELL脚本文件编写格式:
touch 文件名 -----可以自己创建文件后 再vi
vi hello.sh 后进行编辑模式
#!/bin/sh-----------------------必须指定
#输出hello--------------------注释信息,要加#
a=“hello”----------单双引号都可以
b=date-----------脚本中执行命令,输出的是时间,如果不加符号,默认是字符
num=expr 12 / 2------------算数运算,注意空格
nb=expr $[2 ** 3]--------求幂运算,有中括号
echo $a------------------------要进行输出
echo $num--------------------输出结果值
echo $nb--------------------输出结果值
Esc:wq-------------------------保存退出

  1. echo “Hi, $a” 结果是: hi,hello ?
  2. echo "Hi,a s " 不 会 输 出 ” H i , h e l l o s ” , 而 是 输 出 ” H i , ” 。 这 是 因 为 S h e l l 把 as" 不会输出”Hi,hellos”,而是输出”Hi,”。这是因为Shell把 as"不会输出”Hi,hellos”,而是输出”Hi,”。这是因为Shell把as当成一个变量,而$as未被赋值,其值为空
  3. echo “Hi, ${a}word” 结果是: hi,helloword --使用花括号来区分
  4. echo "Hi, a w o r d " {a}word" aword"b 结果是: hi,helloword三 8月15…年月日
SHELL脚本文件执行:
执行脚本的时候,要先将脚本文件的属性改为可执行的:
chmod +x 文件名
执行脚本的方法是:
./文件名
sh 文件名
SHELL脚本调试:
echo输出查看变量取值了。
Bash也提供了真正的调试方法,就是执行脚本的时候用-x参数。
sh -x filename.sh
执行脚本并显示脚本中所有变量的取值,
参数-n,它并不执行脚本,只是返回所有的语法错误。
$参数 获取参数值
“” ‘’ 单引号,双引号框起字符串
脚本中执行命令`` ,也就是英文状态下ESC下的按键信息
数字的加减用 expr
【Linux 脚本】SHELL脚本条件判断
if语句和其他编程语言相似,都是流程控制语句。 注意 不是elsif
它的语法是:
if [ 判断条件]; then

elif …; then

else

fi
与其他语言不同,Shell Script中if语句的条件部分要以分号来分隔。
1、字符串判断
str1 = str2当两个串有相同内容、长度时为真
str1 != str2 当串str1和str2不等时为真
-n str1当串的长度大于0时为真(串非空)
-z str1当串的长度为0时为真(空串)
str1当串str1为非空时为真
2、数字的判断
int1 -eq int2两数相等为真
int1 -ne int2两数不等为真
int1 -gt int2int1大于int2为
int1 -ge int2int1大于等于int2为真
int1 -lt int2int1小于int2为真
int1 -le int2int1小于等于int2为真
3、文件的判断
-e file文件存在为真
-r file用户可读为真
-w file用户可写为真
-x file用户可执行为真
-f file文件为正规文件为真
-d file文件为目录为真
-s file文件大小非0时为真
-t file当文件描述符(默认为1)指定的设备为终端时为真
[]表示条件测试,常用的条件测试有下面几种:
[ -f " f i l e " ] 判 断 file" ] 判断 file"]判断file是否是一个文件
[a ? l t 3 ] 判 断 a -lt 3 ] 判断 a?lt3]判断a的值是否小于3,同样-gt和-le分别表示大于或小于等于
[ -x " f i l e " ] 判 断 file" ] 判断 file"]判断file是否存在且有可执行权限,同样-r测试文件可读性
[ -n " a " ] 判 断 变 量 a" ] 判断变量 a"]判断变量a是否有值,测试空串用-z
[ “ a " = " a" = " a"="b” ] 判断 a 和 a和 a和b的取值是否相等
[ cond1 -a cond2 ] 判断cond1和cond2是否同时成立,-o表示cond1和cond2有一成立
要注意条件测试部分中的空格。在方括号的两侧都有空格,在-f、-lt、=等符号两侧同样也有空格。如果没有这些空格,Shell解释脚本的时候就会出错。
#!/bin/sh
#判断数值是否相等
num=1
num=2
If [ ${num1} -lt ${num2} ]; then
echo 1
else
echo 2
fi
vi fornum.sh
Chmod +x fornum.sh
#!/bin/sh
#for循环数字
for i in {1…5} ; do
echo $i
done
Esc:wq
sh fornum.sh
#!/bin/sh
#判断是否为文件信息
file=touch file2
If [ -f ${file} ]; then
echo “yes”
else
echo “no”
fi
SHELL脚本循环
1、for循环
touch f3.sh
chmod +x f3.sh
vi f3.sh
#!/bin/sh
#for循环整除3的数字信息
for((i =1; i < 100; i++))-----------注意括号和 ;的使用
do
if((${i} % 3== 0)); then ------余数为0
echo $i
continue --------结束本次循环进行下一次
echo hello
fi
Done
Esc:wq
./f3.sh
touch forfile.sh
chmod +x forfile.sh
#!bin/sh
#for循环文件
for shname in ls *.sh -------查询以.sh结尾的所有文件信息
do ------条件 和 do 放一起需要加; ,跳行就不用加
name=echo "$shname" | awk -F. '{print $1}'
------------用.分割,取第1个变量
echo $name
done
Esc:wq
./forfile.sh
2、while循环
touch fwhile.sh
chmod +x fwhile.sh
vi fwhile.sh
#!bin/sh
#while循环
min=1
max=10
While [ $min - lt $max ]
do
echo $min
min= expr $min + 1
Done
Esc:wq
./ fwhile.sh
?# break 命令不执行当前循环体内break下面的语句从当前循环退出.
?# continue 命令是程序在本循体内忽略下面的语句,从循环头开始执行
常用快捷键
Ctrl+c 强行终止
Ctrl+L 清屏
Ctrl+u 删除或者剪切光标之前的语句
Ctrl+y 粘贴剪切或者复制的内容
Ctrl+d 退出当前终端
shell 脚本示例:
  1. 打印1-100中能被10整除的数字
    #!/bin/sh
    min=0
    max=100
    while [ $min -le $max ]
    do
    min=expr $min + 1
    data=https://www.it610.com/article/expr $min % 10
    if [ $data -eq 0 ] ; then
    continue
    fi
    echo $min
    sleep 0.1
    done
=======================================================
2. 读取文件 打印文件3-5行的内容 方式一
#!/bin/sh
line_num=0
cat lianxi1.sh | while read line
do
line_num=expr $line_num + 1
if [ $line_num -ge 3 ] ; then
echo $line
fi
if [ $line_num -ge 5 ]; then
break
fi
done
=========================================================
2. 读取一个文件,打印文件中3-5行的内容 方式二
#!/bin/sh
nl lianxi1.sh | while read line
do
if [[ $line ]] ; then
num=echo $line|awk '{print $1}'
if [ $num -ge 3 ] ; then
if [ $num -le 5 ]; then
echo $line
fi
fi
fi
done
=========================================================

    推荐阅读