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

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++_setw()

    C++ 中使用setw(int n) 来控制输出间隔. 例如: cout<<)<<'a'<<endl;//s与a之间有7个空格,setw()只对后面紧跟的输出产生作 ...

  2. Qt_技巧_将Qt动态链接生成的exe与dll打包方法

    刚开始接触Qt,发现mac平台直接release编译一下就能够直接生成.app文件,并且可以直接运行..app位于工程文件内. 同样发方法在Windows直接运行exe却出现缺失dll情况. 讲过网上 ...

  3. Codeforces822 C. Hacker, pack your bags!

    C. Hacker, pack your bags! time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  4. [javascript-debug-ajax-json]两种不同的json格式数据

    Bug 1: 1. 这里面的 data 只是一维数组{"state":0,"errorCode":0,"data":{"origi ...

  5. poj 2886 线段树的更新+反素数

    Who Gets the Most Candies? Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , ...

  6. Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明2

    1. 安装build-essentials 安装开发所需要的一些基本包 sudo apt-get install build-essential 2. 安装NVIDIA驱动 (3.4.0) 2.1 准 ...

  7. collaborative filtering协同过滤

    每次我想看电影的时候,都会去问我的朋友,小健.一般他推荐的电影,我都比较喜欢.显然不是所有人都有小健这样的能力.因为我碰巧和小健有类似的品味. 这个生活中的经验,实际上有着广泛的用途. 当系统需要为某 ...

  8. Redis .Net

    一.Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括 ...

  9. [实战演练]Intel面试题目 - 进栈出栈顺序问题

    电话面试中写C++,逻辑比较清楚的一个题目,一紧张就不能好好地写下来,漏洞百出.以前经常在完善的编译环境中写代码,换了一个白板子上写反而写的不通顺了,犯了一些基础错误,比如stack中的首个元素是to ...

  10. Python入门 ---基础知识

    Python入门不知道这些你还是承早放弃吧!真的 Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言 ...