一、执行脚本的三种方法。

chmod  +x  添加执行权限

  • ./example.sh          相对路径
  • root/test/example.sh  绝对路径
  • bash example.sh         不用添加执行权限也可

二、shell 变量

临时变量:是 shell 程序内部定义的,使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定变量。

永久变量:是环境变量,其值不随 shell 脚本的执行结束而消失。

[root@vmware ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/home/user/bin

# 用作运行某个命令的时候,本地查不到某个命令或文件,会到这个声明的目录中查找。

三、将一个命令的执行结构赋给变量。

[root@vmware ~]# a=`date`
[root@vmware ~]# echo $a
2018年 05月 23日 星期三 :: PDT
[root@vmware ~]# b=$(ls -l)
[root@vmware ~]# echo $b
总用量 -rw-r--r--. root root 5月 : a.sh drwxr-xr-x. root root 5月 : local -rwxr-xr-x. root root 5月 : t.sh -rw-r--r--. root root 5月 : users

四、多个变量同时声明需要加双引号或者单引号,否则报错。

[root@vmware ~]# name="steven tom mike"
[root@vmware ~]# echo $name
steven tom mike
[root@vmware ~]# name=steven tom mile
bash: tom: 未找到命令...

单双引号区别:

  单引号之间的内容原封不动的指定给了变量

  双引号取消了空格的作用,特殊符号的含义保留。

五、位置变量和特殊变量。

位置变量:shell 解释执行用户的命令时,将命令行第一个字作为命令名,而其他字作为参数。由出现在命令行上的位置确定的参数成为位置参数。

[root@vmware ~]# ./example.sh file1 file2 file3
$ 这个程序文件名 example.sh
$n 这个程序的第n个参数值,n=...N

特殊变量:一开始执行script 脚本时就会设定,且不能被修改,但我们不叫他只读的系统变量,而叫他特殊变量。这些变量当一执行程序时就有了,用户无法将一般的系统变量设定成只读的。

$*  这个程序的所有参数

$#  这个程序的参数个数

$$  这个程序的 PID

$!   执行上一个后台程序的 PID

$?  执行上一个指令的返回值

[root@vmware ~]# vim test.sh
#!/bin/sh
echo "$* 表示这个程序的所有参数:"
echo "$# 表示这个程序的参数个数" touch /tmp/a.txt
echo "$$ 比嗾使程序的进程ID" touch /tmp/b.txt &
echo "$! 执行上一个后台指令的PID"
~ [root@vmware ~]# bash test.sh
表示这个程序的所有参数:
表示这个程序的参数个数
比嗾使程序的进程ID
执行上一个后台指令的PID

六、

[root@vmware ~]# read a b c

[root@vmware ~]# echo $a $b $c
  

七、expr命令 : 运算

[root@vmware ~]# expr  + 

[root@vmware ~]# var1=
[root@vmware ~]# var2=
[root@vmware ~]# expr $var1 - [root@vmware ~]# expr $var1 / $var2 [root@vmware ~]# expr $var1 \* $var2
16
#!/bin/sh
a=
b=
c=
value1=`expr $a + $b + $c`
echo "the value of value1 is $value1"
value2=`expr $a + $c / $b`
echo "the value of value2 is $value2"
[root@vmware ~]# bash test.sh
the value of value1 is
the value of value2 is

七、变量测试语句:test

格式:  test  测试条件

测试范围:整数,字符串,文件

字符串和变量:

test str1==str2  是否相等

test str1!=str2   是否不相等

test str1  测试字符串是否不为空

test -n  str1 测试字符串是否为空 或  test -z  str1 测试字符串为空

测试整数:

test int1 -eq int2

test int2 -ge int2    >=

test int1 -gt int2     >

test int1 -le int2     <=

test int1 -lt  int2     <

test int1 -ne int2

也可以省略写成:[int1 -lt int2]

文件测试:

test -d file   #测试是否为目录

test -f  file

test -x file

test -r file

test -w file

test -e file   测试文件是否存在

test -s file   测试大小是否为空

八、流程控制语句:

语法:

if  条件

then

语句

fi

扩展   ;  分好,表示两个两个命令写在一行。互不影响。

[root@vmware curl-7.50.]# cd /opt ; ls
rh
[root@vmware ~]# cat test.sh
#!/bin/sh echo "if test"
if [ -x /bin/ls ] ; then
/bin/ls
fi

2、多流程控制:

if 条件1   ;  then

  命令1

else

  命令2

fi

3、多个条件的联合

-a 或  &&  :  逻辑与,仅当两个条件都成立时,结果为真

-o 或 ||   :   逻辑或。两个条件有一个成立,结果为真。

4、复杂的if语句

语法:

if  条件1  ;  then

  命令1

elif  条件2   ;  then

  命令2

else

  命令n

fi

#!/bin/sh

echo "input a file name:"
read file_name if [ -d $file_name ] ; then
echo "$file_name is a dir"
elif [ -f $file_name ] ; then
echo "$file_name is file"
elif [ -c $file_name -o -b $file_name ] ; then
echo "$file_name is a device file"
else
echo "$file_name is an unknow file"
fi

shell脚本补缺的更多相关文章

  1. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  2. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  3. shell脚本规划化模板

    shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...

  4. Shell脚本编程30分钟入门

    Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...

  5. Linux Shell脚本逻辑操作符简介

    在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...

  6. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  7. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  8. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

随机推荐

  1. JVM、JRE,JDK

    JVM解释class     Java虚拟机,解释编译后的class文件给系统..java代码编译成 .class机器指令,就能在JVM运行了,直接到硬件执行,实现了跨平台,只要操作系统安装了JVM, ...

  2. hdu2710 Max Factor

    题目 //下面这个是最先用的方法,因为学姐先讲完这个,所以懒得写代码,就将就着这个用,结果搞了老半天,还是错了,心累.. #include<stdio.h> #include<str ...

  3. simhash与Google的网页去重

    前几天去吃葫芦头的路上,大飞哥给详细的讲解了他在比较文本相似度实验时对Google的simhash方法高效的惊叹,回来特意去找了原文去拜读. Simhash 传统IR领域内文本相似度比较所采用的经典方 ...

  4. JSON 全解

    和js对象的区别 json只是一种数据格式,不支持undefined,字符串必须使用双引号,需要对/进行转义/. js属性名可不加"" json属性名必须加"" ...

  5. jQuery插件初级练习3

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  6. MySQL5.7Gtid主从复制总是遇到日志被清等出现无法正常主从复制

    最近最是在MySQL5.7上的的gtid主从复制问题总是遇上下面问题: Last_Error: Coordinator stopped because there were error(s) in t ...

  7. Azure DevOps Server 2019 (TFS)安装教程

    概述 Azure DevOps Server 2019 (之前的名称为TFS),作为微软Azure DevOps 的企业私有(on-premises)服务器,是一个为开发团队提供软件协作开发管理的服务 ...

  8. neo4j CQL 使用

    neo4j CQL 使用 1. create命令 CREATE (emp:Employee) #创建一个emp 员工标签 CREATE (dept:Dept) #部门标签 #Added 1 label ...

  9. Linux的1000个命令

    目录 Linux常用命令 uptime wget uname free who last history pwd cd ls cat head tail tr wc cut diff touch mk ...

  10. 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

    组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...