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中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
随机推荐
- (转)ASP.NET MVC 第五个预览版和表单提交场景
转自:http://ourlife.blog.51cto.com/708821/296171 上个星期四,ASP.NET MVC开发团队发布了ASP.NET MVC框架的“第五个预览版”.你可以在这里 ...
- 各版本.NET委托的写法回顾(转)
转自:http://www.csharpwin.com/csharpspace/7548r2766.shtml 在<关于最近面试的一点感想>一文中,Michael同学谈到他在面试时询问对方 ...
- hdu 5094 状压bfs+深坑
http://acm.hdu.edu.cn/showproblem.php?pid=5094 给出n*m矩阵 给出k个障碍,两坐标之间存在墙或门,门最多10种,状压可搞 给出s个钥匙位置及编号,相应的 ...
- shell 命令 修改hosts文件
hosts文件管理http地址和物理ip地址的映射关系. 开发spring cloud 项目时,遇到不能连接服务器部署的zk问题. 排查后发现,是本地的hosts文件没有添加这台机器的ip映射关系. ...
- 调用GOOGLE的TTS实现文字转语音(XE7+小米2)(XE10.1+小米5)
相关资料: 注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYi ...
- UPDATE语句中SET部分列赋值的先后顺序有影响么?
昨天研发同事问我个问题,UPDATE语句中SET部分列赋值的先后顺序会影响结果么?以前没考虑过这个问题,因为通常我们都会UPDATE时给列赋予一个确定的值,而不是一个依赖于其他列的值. 测试环境: D ...
- Nanui 教程
彩票自动投注软件定制-联灬系-\加/Q;2943075966 黑/科/技问/世.详情直接添加咨询.信/誉/文本 最近接到一个项目 是关于构建一套 电脑端会员管理系统 但考虑到个人比较喜欢写Web ...
- JAVA学习笔记1——环境配置
·JDK 发展史 1995 java语言诞生 1996 JDK1.0发布 1997 JDK1.1发布 1998 JDK1.2发布(Java2),JFC/Swing技术发布 1999 Java被分成了J ...
- 迁移桌面程序到MS Store(4)——桌面程序调用Win10 API
上一篇我们讨论了如何在转制的桌面程序中,通过StartupTask来实现转制版本的开机自启动.实际操作中,我们通过编辑Packaging工程中的Package.appxmanifest文件,来添加自启 ...
- JVM活学活用——GC算法 垃圾收集器
概述 垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了. jvm 中,程序计数器.虚拟机栈.本地方 ...