shell脚本补缺
一、执行脚本的三种方法。
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脚本补缺的更多相关文章
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
- 使用C#给Linux写Shell脚本
在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...
- shell脚本规划化模板
shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...
- Shell脚本编程30分钟入门
Shell脚本编程30分钟入门 转载地址: Shell脚本编程30分钟入门 什么是Shell脚本 示例 看个例子吧: #!/bin/sh cd ~ mkdir shell_tut cd shell_t ...
- Linux Shell脚本逻辑操作符简介
在写程序时,会用到条件判断,测试条件是否成立.很多时候,判断条件是多个的,这个时候需要用到逻辑操作符.shell脚本中常用的有哪些逻辑操作符呢? 1.逻辑与: -a 格式: conditon1 -a ...
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
随机推荐
- _编程语言_C++_setw()
C++ 中使用setw(int n) 来控制输出间隔. 例如: cout<<)<<'a'<<endl;//s与a之间有7个空格,setw()只对后面紧跟的输出产生作 ...
- Qt_技巧_将Qt动态链接生成的exe与dll打包方法
刚开始接触Qt,发现mac平台直接release编译一下就能够直接生成.app文件,并且可以直接运行..app位于工程文件内. 同样发方法在Windows直接运行exe却出现缺失dll情况. 讲过网上 ...
- 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 ...
- [javascript-debug-ajax-json]两种不同的json格式数据
Bug 1: 1. 这里面的 data 只是一维数组{"state":0,"errorCode":0,"data":{"origi ...
- poj 2886 线段树的更新+反素数
Who Gets the Most Candies? Time Limit: 5000 MS Memory Limit: 0 KB 64-bit integer IO format: %I64d , ...
- 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 准 ...
- collaborative filtering协同过滤
每次我想看电影的时候,都会去问我的朋友,小健.一般他推荐的电影,我都比较喜欢.显然不是所有人都有小健这样的能力.因为我碰巧和小健有类似的品味. 这个生活中的经验,实际上有着广泛的用途. 当系统需要为某 ...
- Redis .Net
一.Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括 ...
- [实战演练]Intel面试题目 - 进栈出栈顺序问题
电话面试中写C++,逻辑比较清楚的一个题目,一紧张就不能好好地写下来,漏洞百出.以前经常在完善的编译环境中写代码,换了一个白板子上写反而写的不通顺了,犯了一些基础错误,比如stack中的首个元素是to ...
- Python入门 ---基础知识
Python入门不知道这些你还是承早放弃吧!真的 Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言 ...