linux脚本

快,学会 shell

故事扮演 提交于 2020-04-07 23:47:04
本文分成入门篇和基础篇。基础篇包括变量、字符串处理、数学运算三部分。基础篇包括流控制、函数和函数库三部分。主要是基于例子进行讲解,其中有 4 个复杂一点的脚本,看懂了也就入门了。 我们先来聊一聊 shell 和 shell script 的概念。计算机的运行离不开硬件,我们通过操作系统(OS,Operating System)操作硬件,而我们所说的 linux 严格来说是操作系统(OS)的核心部分——内核(Kernel)。我们无法直接操作 kernel,需要借助于 kernel 外的一层壳 shell 才能与 kernel 进行交互。如果把操作系统(OS)看做是一家公司,shell 就是前台,kernel 就是董事会。当我们访问公司的时候,先和前台(shell)打个招呼,前台通知董事会(kernel),董事会来控制公司(OS)。 俗话说“铁打的营盘流水的兵”,就是公司人来人往,都不会影响公司的运转。对于操作系统也一样,我们可以替换操作系统的前台(shell),甚至董事会(kernel)。如果你想知道你的系统中用到的是什么 shell 可以访问 /etc/shells 文件。,我的电脑上就有下面几种 shell: # /etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /bin/zsh /usr

SHELL脚本之awk妙用

假装没事ソ 提交于 2020-04-07 08:18:43
对于一个sougou文本文件,解压后大概4G,要求在其基础上切出第一列时间年月日时分秒增加在列中,作为hive的一个索引。先将文件head一下展示格式: [root@Master date]# head -n 5 sogou.full.utf8 20111230000005 57375476989eea12893c0c3811607bcf 奇艺高清 1 1 http://www.qiyi.com/ 20111230000005 66c5bb7774e31d0a22278249b26bc83a 凡人修仙传 3 1 http://www.booksky.org/BookDetail.aspx?BookID=1050804&Level=1 20111230000007 b97920521c78de70ac38e3713f524b50 本本联盟 1 1 http://www.bblianmeng.com/ 20111230000008 6961d0c97fe93701fc9c0d861d096cd9 华南师范大学图书馆 1 1 http://lib.scnu.edu.cn/ 20111230000008 f2f5a21c764aebde1e8afcc2871e086f 在线代理 2 1 http://proxyie.cn/ 最开始不知道awk这个命令

Linux shell脚本笔记

萝らか妹 提交于 2020-04-07 06:21:59
shell 命令解释器 是用来解释用户对系统的操作 使用 cat /etc/shells 可以查看 系统安装的shell Linux 启动过程 : BIOS -> MBR -> BootLoader(grub) -> kernel -> systemd -> 系统初始化 -> shell   BIOS 基本 输入输出 系统 选择U盘启动还是硬盘启动;MBR 硬盘里 可引导 的部分;BootLoader(grub) 启动内核工具 选择启动的内核;   kernel 启动内核;systemd 1号进程 其余所有进程派生于它;然后才是系统初始化 启动shell 执行脚本 的四种方式   1 bash ./filename.sh    2 ./filename.sh   3 souce ./filename.sh   4 . ./filename.sh   1和2 执行脚本时 会创建一个 新的进程 来执行 3和4执行脚本时会用 当前进程 来执行(环境变量是当前系统的环境变量) (不产生新进程执行的命令叫做 内建命令   1 3 4 执行脚本时脚本可以不拥有 执行权限 2 执行脚本时必须有可执行权限 管道 '|' 两个 进程 之间的 通信 第一个进程的输出当作第二个进程的输入 a|b|c a的输出当作b的输入 b的输出当作c的输入 (管道应该 规避内建命令 重定向

shell 脚本特殊符号

*爱你&永不变心* 提交于 2020-04-07 06:21:24
通过显示结果可以看到: $# 是传给脚本的参数个数 $0 是脚本本身的名字 $1是传递给该shell脚本的第一个参数 $2是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 Bash shell中的位置参数$#,$*,$@,$0,$1,$2...及特殊参数$?,$-等的含义 在Bash shell中经常会见到一些比较特殊的符号,本人现收集与此,以供查阅: 位置参数: 详见ABS(Advanced Bash Shell)中文翻译版103页第9章第一节内部变量,当然英文版ABS都一样啦 $1, $2, $3等等... 位置参数,从命令行传递给脚本,或者是传递给函数.或者赋职给一个变量. 此数目可以任意多,但只有前 9 个可以被访问,使用 shift 命令可以改变这个限制。 (具体见Example 4-5 和Example 11-15) $0 $0表示 当前执行的进程名,script 本身的名字,或者在正则表达式中表示整行输出 $# 命令行或者是位置参数的个数.(见Example 33-2) $* 所有的位置参数,被作为一个单词. 注意:"$*"必须被""引用. $@ 与$*同义,但是每个参数都是一个独立的""引用字串,这就意味着参数被完整地传递, 并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词. 注意:"$@"必须被 "" 引用.

脚本编程(一)

∥☆過路亽.° 提交于 2020-04-05 19:33:05
脚本编程(一) 啰里啰唆:每周的最后一天都特别难受。墨迹扣不出文章。 一、概况 注释是以 # 开都的, # 开头不一定都是注释 SHELL 是解释型语言 SHELL 脚本第一句以 #!/bin/bash 开头 SHELL 脚本需要具有执行权限 一般以 .sh 结尾 别名在脚本中无效。在脚本中不能使用别名。 bash 使用技巧: -n 检查语法 , 无法无法检测处命令错误,同时只是检查语法不会真正执行脚本。 -x 逐行执行,逐行显示执行结果 脚本中的错误: 1 、语法错误,会导致后续的命令无法继续执行。可以通过 bash -n 选项来检查 提示的错误行不一定是准确的。 2 、命令错误,后续的命令还可以继续执行。无法通过 bash -n 选项来检查错误,可以使用 set -e 或者 set -o errexit 来设定遇到错误命令后退出 3 、逻辑错误,只能使用 bash -x 选项来检查错误。 变量: 变量表示命名的内存空间,讲数据放在内存空间中,通过 "$ 变量名 " 引用 , 从而获取数据 内置环境变量: PS1 SHELL HASTNAME $$ $? 自定义变量: [set] NAME=VALUE set 可以省略 变量类型: 字符型:默认都是字符型 数值:整型、 bash 不支持浮点型 静态编译语言,使用变量前,先声明变量类型,之后类型不能改变,在编译时执行检查, JAVA

一、Shell脚本入门

折月煮酒 提交于 2020-04-04 16:00:12
什么是Shell Shell是一个命令解释器,它的作用是解释执行用户输入的命令及程序等。 常见操作系统默认Shell bash(Linux下默认) sh(Solaris和FreeBSD默认) ksh(AIX默认) 查看系统默认Shell命令 [root@tz ~]# echo $SHELL /bin/bash [root@tz ~]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash 设置vi别名 [root@tz yum.repos.d]# echo "alias vi='vim'" >>/etc/profile [root@tz yum.repos.d]# tail -1 /etc/profile alias vi='vim' [root@tz yum.repos.d]# source /etc/profile 脚本开头 脚本第一行指出由哪个解释器程序执行脚本内容,其他行#开头都为注释 #!/bin/bash 查看系统版本 [root@tz yum.repos.d]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 查看Shell版本 [root@tz yum.repos.d]# bash --version GNU bash, 版本 4.2.46

在shell脚本中使用alias

浪尽此生 提交于 2020-04-03 06:56:08
Linux shell有交互式与非交互式两种工作模式。我们日常使用shell输入命令得到结果的方式是交互式的方式,而shell脚本使用的是非交互式方式。 shell提供了alias功能来简化我们的日常操作,使得我们可以为一个复杂的命令取一个简单的名字,从而提高我们的工作效率。在交互式模式下,shell的alias扩展功能是打开的,因此我们可以键入自己定义的alias别名来执行对应的命令。 但是,在非交互式模式下alias扩展功能默认是关闭的,此时仍然可以定义alias别名,但是shell不会将alias别名扩展成对应的命令,而是将alias别名本身当作命令执行,如果shell内置命令和PATH中均没有与alias别名同名的命令,则shell会“抱怨”找不到指定的命令。 那么,有没有办法在非交互式模式下启用alias扩展呢?答案是使用shell内置命令shopt命令来开启alias扩展选项。shopt是shell的内置命令,可以控制shell功能选项的开启和关闭,从而控制shell的行为。shopt的使用方式如下: shopt -s opt_name Enable (set) opt_name. shopt -u opt_name Disable (unset) opt_name. shopt opt_name Show current status of opt_name.

linux自定义开机启动服务和chkconfig使用方法

纵然是瞬间 提交于 2020-04-02 08:39:05
linux自定义开机启动服务和chkconfig使用方法 linux自定义开机启动服务和chkconfig使用方法 1. 服务概述 在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动,关闭的时候自动关闭。 将需要自动启动的脚本/etc/rc.d/init.d目录下,然后用命令chkconfig --add filename将自动注册开机启动和关机关闭。实质就是在rc0.d-rc6.d目录下生成一些文件连接,这些连接连接到/etc/rc.d /init.d目录下指定文件的shell脚本。 2. 手工创建服务 在/etc/rc.d/init.d目录下创建shell脚本,文件名auto_run。 设置脚本的运行权限chmod +x auto_run。 然后在rc0.d-rc6.d目录下分别创建文件连接。 ln -s /etc/rc.d/init.d/auto_run /etc/rc.d/rc2.d/S99auto_run ln -s /etc/rc.d/init.d/auto_run /etc/rc.d/rc3.d/S99auto_run ln -s /etc/rc.d/init.d/auto_run /etc/rc.d/rc5.d/S99auto_run ln -s /etc/rc.d/init.d/auto_run

C2 shell

家住魔仙堡 提交于 2020-04-01 01:04:31
1.什么是shell? 用户与内核之间的一个接口。最流行和常用的: bash。 2.重定向 > 重定向到另外的文件。0,1,2对一个程序来说是最常用的三个文件描述符! >>是把内容附加到文件的尾部而不会覆盖文件原有的内容。 这命令啥意思? #kill -HUP 1234 >kill.std 2>kill.stderr #kill -l 1234 > kill.std 2>&1 第一条语句的解读:>kill.std等同于1>kill.std,标准输出1是默认的可以不写! 第二条语句的解读: 将标准错误输出2绑定到标准输出1,然后将标准输出重定向到kill.std。 另外一个例子: [chengmo@centos5 shell]$ ls test .sh test1.sh > /dev/null 2>&1 #将错误输出2 绑定给 正确输出 1,然后将 正确输出 发送给 /dev/null设备 这种常用 注意: (1)shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。很霸道的地方! (2)“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定。 (3)当命令执行完

shell脚本执行错误 $'\\r':command not found

不羁岁月 提交于 2020-03-28 23:29:05
   在linux上执行脚本时出现$’\r’:command not found,然而仔细检查脚本,对应行位置只是一个空行,并没有问题,那么linux为什么会将一个回车的空行报错?   原因是这样的:脚本是在window下编辑完成后上传到linux上执行的,win下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n。linux下不识别\r为回车符,所以导致每行的配置都多了个\r,因此是脚本编码的问题。   在linux上执行 dos2unix 脚本名,再次执行脚本,报错消失。 来源: https://www.cnblogs.com/jing99/p/9913764.html