Linux——shell简单学习(一)
首先来一个小程序,来查看所在目录,以及该目录下的文件
#!/bin/sh # “#!”指定用sh执行shell脚本
#this is to show workstation # “#” 表示注释
echo "We are currently in the following directory" # echo 表示输出
/bin/pwd #输出用户所在目录
echo # 换行
echo "This directory contains the following files"
/bin/ls #列出该目下的文件
1. #!指定执行脚本的shell
2. #注释行
3. 命令和控制结构
创建shell程序的步骤:
第一步:创建一个包含命令和控制结构的文件。
第二步:修改这个文件的权限使它可以执行。使用chmod u+x
第三步:执行 ./example
(也可以使用“sh example”执行)
Shell变量:
变量:是shell传递数据的一种方法,用来代表每个取值的符号名。
Shell有两类变量:临时变量和永久变量。
临时变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量。永久变量是环境变量,其值不随shell脚本的执行结束而消失。
用户自定义变量:用户定义的变量由字母或下划线开头,由字母、数字或下划线序列组成,并且大小写字母意义不同。变量名长度没有限制。在使用变量值时,要在变量名前加上前缀“$”。
设置和使用变量:
设置变量:习惯上用大写字母来命名变量。变量名只能以字母表中的字符开头,不能用数字。变量赋值:赋值号“=”两边应没有空格(这里要注意)。定义时赋值,如NUM=1
将一个命令的执行结果赋给变量,如:TIME=`date`
将一个变量赋给另一个变量,如:A =$B
使用echo命令查看变量值。例如:echo $A
列出所有的变量: set
包含多个字的变量:$NAME=“Mike Ron” 或 $NAME=‘Mike Ron’ 注意单引号与双引号的区别:
例: 我们定义了变量a=111
echo 'a = $a' 输出为a = $a
echo "a = $a" 输出为a = 111
# unset NAME 删除变量
位置变量和特殊变量:
Shell解释执行用户命令时,将命令行的第一个部分作为命令名,其它部分作为参数。由出现在命令行上的位置确定的参数称为位置参数。
ls -l file1 file2 file3
$0 这个程序的文件名 ls -l
$n 这个程序的第n个参数值,n=1-9
特殊变量:
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个后台命令的PID
$? 执行上一个命令的返回值、
在讲执行计划的时候我们讲到过系统周期性计划,然后进行系统的备份。 我们只要先编辑crontab -e 填入我们的计划,然后再将写好的脚本的绝对路径写在最后一个选项上即可。
我们在这里就给出shell脚本的书写, 本人已经验证时对的。这里没写邮件通知,只用用了write
1:首先编写crontab -e
46 19 * * * /home/helen/sysinfo.sh
2:在/home/helen/下创建sysinfo.sh shell脚本
#!/bin/sh
#auto mail for system /bin/date +%F >> /tmp/sysinfo #记录时间
echo "disk info : " >> /tmp/sysinfo
/bin/df -h >> /tmp/sysinfo #将硬件信息写入
echo >> /tmp/sysinfo
echo >> "online user" >> /tmp/sysinfo
/usr/bin/who | /bin/grep -v root >> /tmp/sysinfo #将在线用户写入
echo >> /tmp/sysinfo
echo "memory info" >> /tmp/sysinfo
/usr/bin/free -m >> /tmp/sysinfo #将内存信息写入
echo >> /tmp/sysinfo #write root
/usr/bin/write root < /tmp/sysinfo //通知root
read命令:从键盘读入数据,赋给变量 (相当于scanf 、 cin echo相当于 print , cout)
如:read USERNAME
expr 命令:
expr命令:对整数型变量进行算术运算
例如:
expr 3 + 5
expr $var1 - 5
expr $var1 / $var2
expr $var3 \* 10 #乘法比较特别
expr `expr 5 + 7`/$var4
var4=` expr $var1 / $var2 `
变量测试语句:
变量测试语句:用于测试变量是否相等、 是否为空、文件类型等。
test 测试条件 测试范围:整数、字符串、文件
变量测试语句
字符串测试:
test str1=str2 测试字符串是否相等
test str1!=str2 测试字符串是否不相等
test str1 测试字符串是否不为空
test -n str1 测试字符串是否不为空
test -z str1 测试字符串是否为空
整数测试:
test int1 -eq int2 测试整数是否相等
test int1 -ge int2 测试int1是否>=int2
test int1 -gt int2 测试int1是否>int2
test int1 -le int2 测试int1是否<=int2
test int1 -lt int2 测试int1是否<int2
test int1 -ne int2 测试整数是否不相等
文件测试:
test -d file 指定文件是否目录
test -f file 指定文件是否常规文件
test -x file 指定文件是否可执行
test -r file 指定文件是否可读
test -w file 指定文件是否可写
test -a file 指定文件是否存在
test -s file 文件的大小是否非0
变量测试语句:
变量测试语句一般不单独使用,一般做为if语句的测试条件,如:
if test -d $1 then
…
fi
变量测试语句可用[]进行简化,如 test -d $1 等价于 [ -d $1 ] 注意[] 内两边必须有空格
例子:
#!/bin/sh
echo "输入要比较的两个数"
read a b
echo "您要比较的两个数为 $a $b"
if [ $a -le $b ];then
echo "最小值为 $a"
exit 0
else
echo "最小值为 $b"
exit 0
fi
流控制语句:
流控制语句:用于控制shell程序的流程
exit语句:退出程序执行,并返回一个返回码,返回码为0表示正常退出,非0表示非正常退出。 (相当于return) 例如:exit 0
if …then …fi语句,例如:
#!/bin/sh if [ -x /etc/rc.d/init.d/httpd ] #判断一个文件是否可执行 then /etc/rc.d/init.d/httpd restart fi
if 条件1 then 命令1 elif 条件2 then 命令2 else 命令3 fi
多个条件的联合:
-a:逻辑与,仅当两个条件都成立时,结果为真。
-o:逻辑或,两个条件只要有一个成立,结果为真。
echo "please input a file name:"
read file_name
if [ -d $file_name ]
then
echo "$file_name is a directory"
elif [ -f $file_name ]
then
echo "$file_name is a common file"
elif [ -c $file_name -o -b $file_name ]
then
echo "$file_name is a device file“
else
echo "$file_name is an unknown file"
fi
Linux——shell简单学习(一)的更多相关文章
- Linux——shell简单学习(二)
流控制语句: for…done语句 格式:for 变量 in 名字表 do 命令列表 done 例子: #!/bin/sh for DAY in Sunday Monday Tuesday ...
- Linux shell 菜鸟学习笔记....
20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...
- Linux shell ${}简单用法
转自:Linux shell ${}简单用法 为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.t ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- Linux shell 重定向学习笔记
在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读 ...
- linux shell脚本学习笔记一
一.文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tm ...
- Linux shell command学习笔记(一)
Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell.在现在的大多数Linux发行版中,默认的Shell一般都是Bourne again shell(bash). &l ...
- Linux shell简单创建用户脚本
前面介绍简单的shell编写规则. 现在开始编写一个简单的shell脚本. Linux shell介绍 编写shell脚本 1.创建脚本文件 2.根据需求,编写脚本 3.测试执行脚本 ...
- Linux Shell 编程学习笔记
1:Shell Script中if语句的条件部分要以分号来分隔 2:要注意条件测试部分中的空格.在方括号的两侧都有空格 3:echo "Hi, ${a}s" 单引号中的变量不会进行 ...
随机推荐
- docker学习(3)--Dockfile详解
转载请注明出处:http://www.cnblogs.com/lighten/p/6900556.html 1.基本说明 Dockfile是一个用于编写docker镜像生成过程的文件,其有特定的语法. ...
- MUTABLE和IMMUTABLE集合
Scala 集合类系统地区分了可变的和不可变的集合.可变集合可以在适当的地方被更新或扩展.这意味着你可以修改,添加,移除一个集合的元素.而不可变集合类,相比之下,永远不会改变.不过,你仍然可以模拟添加 ...
- centos7最小安装初始化脚本
#!/bin/bash #zhangsen #lovexlzs@qq.com if [[ "$(whoami)" != "root" ]]; then exit ...
- notification 是同步的
所有notification的观察者执行之后,post notification的函数才会往下执行.
- 2018-2019-2 网络对抗技术 20165324 Exp2: 后门原理与实践
2018-2019-2 网络对抗技术 20165324 Exp2: 后门原理与实践 课程学习: 后门 后门:是不经过正常认证流程而访问系统的通道,存在与编译器.操作系统.固件和应用中等等. 后门工作流 ...
- testng入门教程7 TestNG组测试
在TestNG中组测试是一个新的创新功能,它不存在于JUnit框架,它允许调度到适当的部分方法和瓶坯复杂的测试方法分组.您不仅可以声明属于群体的那些方法,但你也可以指定一组包含其他组.然后,TestN ...
- linq to sql 左联接出错,未将对象引用设置到实例
var result = from a in model join b in orderDetailModel on a.FoodMenuID equals b.FoodMenuID into g f ...
- Twitter OA prepare: Flipping a bit
You are given a binary array with N elements: d[0], d[1], ... d[N - 1]. You can perform AT MOST one ...
- uva11107 后缀数组
题意给了n个串 然后计算 这些串中的子串在大于1/2的串中出现 求出这个串的最长长度. 将这些串用一个每出现的不同的字符拼起来 ,然后二分找lcp #include <iostream> ...
- ORTP编译为静态库的问题
项目中需要用到ORTP,我采用的编译环境是 VC2013,当我在项目设置中将设置为静态库是,发现没有导出函数,比如在需要连接 oRTP.lib库时提示 找不到 ORTP_init; 解决办法是 :在O ...