------------------------------------------------------------------Shell脚本----------------------------------------------------------------------------------------

	1:shell是一个在操作系统上的软件,linux登录后默认就进入这个软件。
shell是一个命令解释器,能解析用户输入的命令(ls,pwd......)。
shell拥有自己的内建命令集。 2:bash
bash(Bourne Again shell)是shell的扩展,并且完全兼容shell(类似vim与vi的关系) 3:什么是shell script
Shell脚本是利用shell的功能所写的一个小程序,将一些shell的语法与命令写在里面,
搭建管道与数据重定向等功能,以达到我们所想要的功能。 4:解释型语言与编译型语言
Shell脚本是解释型语言,执行的时候是逐条解释你写的程序。(Python)
编译型语言需要先进行编译器编译,将代码翻译成机器能识别的指令,然后运行(C++) 一:创建
1:使用文本编辑器(vim)来创建文本文件(以.sh结尾)
#!---------------------------------第一行必须包括shell的声明
#/bin/bash--------------------------告诉系统执行的时候调用什么解释器 2:输入命令(linux以及shell内建命令)
echo "hello word" 3:给文件添加执行权限。
chmod 755 hello.sh 4:运行脚本。
第一种方式:指定脚本的绝对或相对路径来运行 ./hello.sh
第二中方式:直接运行解释器,将脚本作为参数运行sh hello.sh 5:常见问题
-bash:./hello.sh:Permission denied 没有赋予执行权限 二:shell变量,赋值
1变量:
变量:以字符或下划线开头,后面跟任意长度的字母:var=linux 变量的引用:在变量前面加"$"符号:echo "$var" **如果变量的中间有空格,需要用双引号引起来:var="hello word" 2特殊变量:
位置参数:$n,n为数字,$0为命令本身,$1-$9是命令第一到九个参数
$*---------------------------------代表所有的参数。
$#---------------------------------代表参数的个数
$?---------------------------------代表命令的返回状态 3命令替换和赋值:
命令替换格式:------------------------------$(cmd) 或者 `cmd`# ``为tab上的反引号。
在执行命令的时候会先将$(cmd)或者`cmd`里的命令先执行一遍,再将结果返回到原来的命令中。
var=$(uname-a)
echo $var 命令替换和管道的去区别?
命令替换:是将一个命令的输出作为另外一个命令的参数。
管道 :将命令的输出作为下一个命令的标准输入。
如:data + %Y|touch
touch $(data + %Y) 4算数运算和赋值:
echo 1+2,没有输出3。(shell需要特殊的格式来进行算数运算)
方式一:((i=$j+$k))
方式二:let i=$j+$keys 赋值:
var = $(($i+$j))
echo $var 5多个命令分隔符:
分号(;)是shell的命令分隔符,让同一行的命令能够顺序执行。:echo1 ;echo2 练习题:
1:命令行输入2个数字,写个小程序,计算2个数字的和,并输出结果
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
echo $sum 2:命令行输入2个文件,写个小程序,把这两个文件都拷贝到以年月日命名的目录下,并输出每次拷贝的执行结果 date +%Y%m%d
#!/bin/bash
file1=$1
file2=$2
dir=`date +%Y%m%d`
mkdir $dir cp $file1 $dir && echo "copy ok" cp $file2 $dir && echo "copy ok 三:shell中的控制结构if:
#!/bin/sh
#make a directory
mkdir /home/dave/mydocs
#copy all doc files
cp *.docs /home/dave/docs
#delete all doc files
re *.docs 上述脚本有什么问题?如果目录创建失败或目录创建成功但文件拷贝失败会如何?
会导致文件没有备份就被删除。因此需要在命令执行前做逻辑判断,
根据上次命令的不同的执行状态,来采取不同的操作。这里大概就会分为两类:条件判断,基于各种条件,进行后续相应操作;循环控制 1:if语句和test命令
(1):字符串测试(两边要有空格)
== 等于
!= 不等于
> 大于
< 小于
-z string 测试指定字符是否为空,空为真,非空为假。
-n string 测试指定字符串是否为空,空为假,非空为真。 (2):文件测试
-e FILE 测试文件是否存在
-f file 测试文件是否为普通文件
-d file 测试指定路径是否为目录
-r file 测试文件对当前用户是否可读
-w file 测试文件对当前用户是否可写
-x file 测试文件对当前用户是否都可执行 (3):组合测试
-a:and
-o:or
!:非 练习:
1:判断当前用户是否是root,不是的话退出,如果是的话显示一下root的登录shell
用户id:id -u
退出: exit
切分文件行:cut ,-d设置分隔符,-f打印某字段 #!/bin/bash
if [ `id -u` -eq 0 ]
then
shell=`grep "^root" /etc/passwd|cut -d : -f 7`
echo $shell
else
exit 1
fi 2:命令行输入任意三个整数,判断最大的数
MAX=$1
if [ $2 -ge $1 ]; then
MAX=$2
fi
if [ $3 -ge $MAX ]; then
MAX=$3
fi echo "the max number is $MAX." 3:用Shell脚本,判断/bin/nohup是不是可执行文件,如果是将其拷贝到/tmpdir目录下,判断如果/tmpdir目录不存在,自动创建。
if [ -x /bin/nohup ]
then
if [ ! -d /tmpdir ]
then
mkdir /tmpdir
fi
cp /bin/nohup /tmpdir
fi 四:shell中&&和||的使用方法
1:&&运算符:
command1 && command2 &&:左边的命令返回真(0),执行成功后,右边的命令才能被执行。
命令之间使用&&连接,实现逻辑与的功能。
如:test -f /var/log/messages && echo ok 2:||运算符:
command1 || command2 ||:则与&&相反,如果||左边未成功执行,那么执行||右边的命令才能被执行。
如:test -f ||echo error 五:for循环语法:
1:for循环
for arg in[list]
do
command.....
done
list列表可以是以空格分割的字符串,也可以是命令替换返回的结果。
如:
for v in /etc/sudoers/etc/resol|v.conf
do ls -l $v
done
练习:
1:请用for创建100个文件,文件名为ps1-ps100
#!/bin/bash
for i in `seq 100`
do
touch ps$i
done 2:请用for把ps1-ps100,分别创建100个tar包,命名ps1.tar-ps100.tar
#!/bin/bash
for i in `ls ps*`
do
tar -cvf $i.tar $i
done 六:while循环语法:
1:while循环:
while [condition]
do
condition
done 输入名字打印一个随机数字
while read -p "please input a name "name;
do
echo $name $RANDOM;
done 七:shell函数:
格式:
function nmae(){ }
shell函数可以带function关键字,也可以不带。
shell函数内可以加return返回值,也可以不带,如果不带就以最后一条命令运行结果,作为返回值。 例如:
demoFun(){
echo *这是我的第一个shell 函数!*
}
echo "------函数开始执行----------------"
demoFun
echo "------函数执行完毕-----------------" 练习:
1:请查找出/etc/下面所有包含name字符串的文件
2:批量创建10个用户,用户名为user1-user10,并设置统一的密码为123456。要求先判断用户是否存在,不存在再创建。
3:将/etc/下所有.conf结尾的文件,拷贝到/newconf目录,将/newconf打包为以当前时间戳定义的文件名。
要求:判断/newconf目录是否存在,如果不存在就自动创建,如果存在,就先清空这个目录
4:请用for创建100个文件,文件名为1.py-100.py,并全部更改文件名为lufei1.py-lufei100.py。
5:写一个编译安装python3的脚本
6:请用shell编写一个等腰三角形,接收用户输入的数字 ------

  

Shell----简单整理的更多相关文章

  1. 常用的shell命令整理

    工作快一年了,shell命令也玩了一年了.还是有点积累的,下面是本人常用的. 1.pwd | xargs -i basename {}   获取当前所在目录的名称 2.ps -ef|grep -w   ...

  2. Linux的经典shell命令整理

    Linux的经典shell命令整理 1.删除0字节文件find -type f -size 0 -exec rm -rf {} \; 2.查看进程按内存从大到小排列ps -e -o “%C : %p ...

  3. .NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

  4. 转载:.NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

  5. MYBATIS 简单整理与回顾

    这两天简单整理了一下MyBatis 相关api和jar包这里提供一个下载地址,免得找了 链接:http://pan.baidu.com/s/1jIl1KaE 密码:d2yl A.简单搭建跑项目 2.进 ...

  6. 哪些CSS是可以被继承的--简单整理

    那些CSS是可以被继承的--简单整理1.文本相关属性是继承的:font-size,font-family,line-height,text-index等2.列表相关属性是继承的:list-style- ...

  7. Linux学习之常用网络通信命令与shell简单应用技巧(四)

    (一)常用网络通信命令 (1)ping命令 (2)write命令 (3)wall命令 (4)ifconfig命令 (5)shutdown命令 (6)reboot命令 (二)shell简单应用技巧 (1 ...

  8. Linux shell ${}简单用法

    转自:Linux shell ${}简单用法 为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.t ...

  9. .NET Web开发技术简单整理 转

    .NET Web开发技术简单整理 原文:http://www.cnblogs.com/SanMaoSpace/p/3157293.html 在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何 ...

  10. linux shell 总结 (整理)

    ls /usr/bin/ info #路径操作 dirname basename #“”和‘’与 ` ` 在shell变量中的区别 “ ” 允许通过$符引用其他变量 ‘’禁止引用其他变量符,视为普通字 ...

随机推荐

  1. Notes中几个处理多值域的通用函数

    1.查找出查找内容在多值域中的索引值 getItemIndex(域名,域值,文档) Public Function getItemIndex(ByVal fieldName As String, By ...

  2. 让div获取焦点

    DIV获取焦点有两种方法: tabindex="0" contenteditable="true" ①:设置div为可编辑状态,则可点击获取焦点,同时div的内 ...

  3. linux下open和fopen的区别

    二者返回值不同. fopen可以指定宽字符和ASCI.

  4. Hexo NexT 博客后台管理指南

    上篇文章讲到,将Hexo NexT 博客成功上传到GitHub 并绑定到我们自定义的域名下了. 但是却还是有个问题,那就是Hexo NexT 博客如何进行后台管理呢? 如果总是通过手动创建文件的方式, ...

  5. RelativeLayout 布局参数

    今天调布局的时候 想把界面做成横屏竖屏都可以的 突然发现之前理解的android:布局参数都是有问题的 今天贴出来 下次自己也记得 以下大部为用在RelativeLayout中的一些参数: andro ...

  6. java中的数据加密5 数字证书

    数字证书 A用私钥加密了,那么B接受到消息后,用A提供的公钥解密:那么现在有个讨厌的C,他把消息拦截了,然后用自己的私钥加密,同时把自己的公钥发给B,并告诉B,那是A的公钥,结果....,这时候就需要 ...

  7. svn常见错误解决

    Svn冲突导致锁住的解决方案:错误码:svn: E155037: Previous operation has not finished; run 'cleanup' if it was interr ...

  8. 稍稍解读下JDK8的HashMap

    首先,源码中上来就有一大段注释,但最重要的就是第一句. 大意如下: 本map经常用作一个 binned (bucketed) hash table (下面有解释),但是,当bins很大的时候,它们会被 ...

  9. mysql wait_timeout 8小时问题解决,tomcat数据源的配置

    异常报错: 2017-02-13 09:30:17.597 [startQuertz_Worker-6] ERROR com.autoyol.task.TransStatManageTask#exec ...

  10. 【12月26日】A股滚动市盈率PE最低排名

    深康佳A(SZ000016) - 滚动市盈率PE:1.47 - 滚动市净率PB:0.98 - 滚动年化股息收益率:4.97% - 消费电子产品 - 深康佳A(SZ000016)的历史市盈率走势图 华菱 ...