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

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. C#期末大作业 消消乐 2017-06-01 18:11 275人阅读 评论(0) 收藏

    邻近期末,忙于刷题之余意识到期末大作业来不及了,匆匆赶下了作业,虽说做的很是粗糙,但完全原创的 下载链接 https://pan.baidu.com/s/1cCNLr4 大体的做大约3天完成了: 第一 ...

  2. 用mysql workbench导出mysql数据库关系图

    用mysql workbench导出mysql数据库关系图 1. 打开mysql workbench,选择首页中间"Data Modeling"下方的第二栏"Create ...

  3. jQuery插件初级练习3

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

  4. 3.insert添加用法

    一.新增用户接口 UserMapper.java package tk.mybatis.simple.mapper; import org.apache.ibatis.annotations.Para ...

  5. [ASE][Daily Scrum]11.10

    明天就是一年一度的光棍节了 提前提醒各位已经有妹子蓝孩子藏好自己的银行卡. 涛哥上周回家去了,进度上稍有一些耽搁不过今天就能补完所以影响不严重. 此外纠正我(PM-poor man)之前一个错误,我之 ...

  6. java的环境变量

    Java学习第一步——JDK安装及Java环境变量配置  2014-05-30 9:09  Java SE  阿超  9226 views Java作为当下很主流的编程语言,学习Java的朋友也越来越 ...

  7. MarkdownPad 2 for Windows 10 预览问题解决方案。

    知乎问题: Windows 10 下 MarkdownPad2 预览无法显示是怎么回事? 文章提供的解决方法可以奏效.具体如下: 在我的 Win10 上测试了一次,确实会遇到这个问题,官方的说法是从 ...

  8. docker实用命令集合

    1. 访问docker中的MySQL数据库: docker exec -it test_mysql_1 mysql -u root -p 2. 用docker命令导入或导出mysql数据: 导出doc ...

  9. DataTable 快速导入数据库——百万条数据只需几秒

    public void InsertTable(DataTable dt, string TabelName, DataColumnCollection dtColum) { string str = ...

  10. idea 映射文件同class文件一起打包安装

    经过几天的摸索,已经能够用idea做日常的Demo了,在复习的过程中,又在学的知识,所以进度有点慢,但自己好像有点着急,为自己的效率 但是自己也是知道的,只顾速度,最后的学完的效果也不是自己想要的,所 ...