shell编程

shell入门

混江龙づ霸主 提交于 2020-01-07 20:56:10
前言 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 常见的shell指令 echo命令用于向窗口输出文本。 使用变量:使用一个定义过的变量,只要在变量名前面加上$符号,还可以加上对变量加上花括号{},变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。笔者建议,推荐给所有变量加上花括号,这是个好的编程习惯。 your_name=“qinjx” echo $your_name echo ${your_name} for skill in Ada Coffe Action Java; do echo “I am good at ${skill}Script” done 如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。 删除变量:使用unset命令删除变量 变量被删除后不能再次使用,unset命令不能删除只读变量 只读变量:使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。 #!/bin/bash

Shell 参数扩展及各类括号在 Shell 编程中的应用

本秂侑毒 提交于 2020-01-07 09:30:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天看有人总结了 shell 下的参数扩展,但不是很全,恰好以前整理过放在百度空间,但百度空间目前半死不活的情况下对 Google 非常不友好,索性一并转过来方便查阅。 1、bash 中的 大括号参数扩展 (Parameter Expansion) 假设我们定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt 1.1 bash 下的 split 取“数组”的首、尾: ${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt ${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt ${file#*.}:拿掉第一个 . 及其左边的字符串:file.txt ${file##*.}:拿掉最后一个 . 及其左边的字符串:txt ${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3 ${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值) ${file%.*}:拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file ${file%%.*}:拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my Tips: 记忆的方法为: #

Shell脚本入门-2

半腔热情 提交于 2020-01-07 08:38:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> (一)定义变量时,变量名不加美元符号($,PHP语言中变量需要) ,如: your_name="runoob.com" 注意, 变量名和等号之间不能有空格 ,这可能和你熟悉的所有编程语言都不一样。同时, 变量名的命名须遵循如下规则: 命名只能使用英文字母,数字和下划线, 首个字符不能以数字开头 。 中间不能有空格 ,可以使用下划线(_)。 不能使用标点符号。 不能使用bash里的关键字 (可用help命令查看保留关键字)。 有效的 Shell 变量名示例如下: RUNOOB LD_LIBRARY_PATH _var var2 无效的变量命名: ?var=123 user*name=runoob 除了 显式地直接赋值,还可以用语句给变量赋值 ,如: for file in `ls /etc` 以上语句将 /etc 下目录的文件名循环出来 。 (二)使用变量 使用一个定义过的变量,只要在变量名前面加美元符号即可,如: your_name="qinjx" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了 帮助解释器识别变量的边界 ,比如下面这种情况: for skill in Ada Coffe Action Java; do echo "I

Shell脚本入门-5

一笑奈何 提交于 2020-01-07 07:49:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。 与大部分编程语言类似,数组元素的下标由0开始。 Shell 数组用括号 来表示, 元素用"空格"符号分割开 ,语法格式如下: array_name=(value1 ... valuen) 实例 #!/bin/bash # author:ethan my_array=(A B "C" D) 我们也可以使用下标来定义数组: array_name[0]=value0 array_name[1]=value1 array_name[2]=value2 读取数组 读取数组元素值的一般格式是: ${array_name[index]} 实例 #!/bin/bash # author:ethan my_array=(A B "C" D) echo "第一个元素为: ${my_array[0]}" echo "第二个元素为: ${my_array[1]}" echo "第三个元素为: ${my_array[2]}" echo "第四个元素为: ${my_array[3]}" 执行脚本,输出结果如下所示: $ chmod +x test.sh $ ./test.sh 第一个元素为: A 第二个元素为:

sh和bash之间的区别

那年仲夏 提交于 2020-01-07 00:51:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在编写shell程序时,我们经常使用 /bin/sh 和 /bin/bash 。 我通常使用 bash ,但是我不知道它们之间有什么区别。 bash 和 sh 之间的主要区别是什么? 在使用 bash 和 sh 编程时,我们需要注意什么? #1楼 Shell 是用户和OS之间的接口,用于访问操作系统的服务。 它可以是GUI或CLI(命令行界面)。 sh (Bourne sh ell)是一个Shell命令行解释器,用于类似Unix / Unix的操作系统。 它提供了一些内置命令。 在脚本语言中,我们将解释器表示为 #!/bin/sh 。 它是bash(自由/开放),kash(非自由)之类的其他shell支持最广泛的一种。 击 (B ourne 增益 的 地狱)是一个外壳更换对于Bourne壳。 Bash是sh的超集。 Bash支持sh。 POSIX是一组定义POSIX兼容系统应如何工作的标准。 Bash实际上不是POSIX兼容的外壳。 在脚本语言中,我们将解释器表示为 #!/bin/bash 。 比喻: Shell就像一个接口或规范或API。 sh是实现Shell接口的类。 Bash是sh的子类。 #2楼 /bin/sh 可能会也可能不会调用与 /bin/bash 相同的程序。 sh 至少 支持 POSIX所需

shell编程题(十七)

跟風遠走 提交于 2020-01-06 12:27:44
题目: 终端输入一个文件名,判断是否是设备文件。 答案: #!/bin/bash echo -e "please input a filename to judge it is or not a device file.\n\n" read -p "Input a filename: " filename if [ -b $filename -o -c $filename ]; then echo "$filename is a device file" exit 0 else echo "$filename is not a device file" exit 1 fi 扩展: 文件类型判断: [-b]:表示判断文件属性是否是装置文件里面的可供储存的接口设备(可随机存取装置); [-d]:表示判断文件属性是否是目录; [ - ]:表示判断文件属性是否是文件;(存疑,不知道是不是这种表示方法) [ - l ]:表示判断文件属性是否为链接文档(link file); [ - c ]:表示判断文件属性是否为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。 来源: https://www.cnblogs.com/wanghao-boke/p/12152261.html

shell编程题(十四)

断了今生、忘了曾经 提交于 2020-01-06 10:16:44
题目: 编写一个的脚本,它包括以下内容 a) 包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的。 b) 问候用户。 c) 显示日期和时间。 d) 显示这个月的日历。 e) 显示您的机器名。 f) 显示当前这个操作系统的名称和版本。 g) 显示父目录中的所有文件的列表。 h) 显示root正在运行的所有进程。 i) 显示变量TERM、PATH和HOME的值。 j) 显示磁盘使用情况。 k) 用id命令打印出您的组ID。 m) 跟用户说“Good bye” 答案: #!/bin/bash user=`whoami` case $user in root) echo "hello robot";; ubuntu) echo "hello ubuntu";; *) echo "hello $user, welcome" esac echo "date: `date`" echo "calendar: `cal`" echo "name: `uname -n`" echo "name of operation and version: `uname -s; uname -r`" echo "all file list of parent menu: `ls ../`" echo "all process running of root: `ps -u root`" echo

Linux Bash Shell编程快速入门

空扰寡人 提交于 2020-01-05 12:04:50
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入、输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子 —— Hello World! 几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。 用 vi 编辑器编辑一个 hello 文件如下: #!/bin/bash # This is a very simple example echo Hello World 这样最简单的一个 BASH 程序就编写完了。这里有几个问题需要说明一下: 一,第一行的 #! 是什么意思 二,第一行的 /bin/bash 又是什么意思 三,第二行是注释吗 四,echo 语句 五,如何执行该程序 #! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。Linux 系统根据 “#!” 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 “man magic”命令 及 /usr/share/magic 文件来了解这方面的更多内容。在 BASH 中 第一行的 “#!” 及后面的 “/bin/bash” 就表明该文件是一个 BASH 程序,需要由

SHELL编程基础(一)

给你一囗甜甜゛ 提交于 2019-12-30 00:56:22
SHELL编程基础 shell分登录shell,交互式非登录shell,还有非交互式shell。 登录式shell属于交互式shell,相关执行文件是etc/profile 交互式非登录shell中并不执行初始化文件中的命令,然而交互式非登录shell从登录shell中继承了由这些初始化文件设置的shell变量。 非交互式shell并不执行初始化文件中的命令,然而交互式非登录shell从登录shell中继承了由这些初始化文件设置的shell变量。 子shell继承了那些被输出的变量。 #Source global definitions if[ -f /etc/bashrc ]; then ./etc/bashrc fi 用户常用的初始化文件由.bash_profile,.bashrc 编辑完.bashrc这类的初始化文件后,没必要重启,用内置命令”.”或source即可。也就是说,可以用”.”或source命令来运行任何shell脚本,而不仅仅是初始化文件。 1、内置符号 ()子shell $()命令替换 (())算术表达式计算,let同义词,当被括起来的值中包括等号时使用 $(())算术扩展(不适用于括起来的值中包括等号的情况) []test命令 [[]]条件表达式,类似于[],但添加了字符串比较。 2、通配符 * ? [xxx],[x-x] 转义字符\x,消除字符的特殊含义

SHELL编程基础(二)

别来无恙 提交于 2019-12-29 22:35:00
SHELL编程基础(二) 编写一个简单的程序 #this is sample //注释 echo "hello,welcome to Fedora 6" echo "Logged in $USER." env|grep PATH echo $PATH 1 、变量 1 )用户变量 VAL=val 如 St?nt=tom echo St?nt echo $St?nt 变量引用符“$” 注意:单引号和反斜杆都可以阻止使用变量的值。双引号不会阻止变量替换,但是可以关闭大多数其他字符的特殊意义。 当使用变量作为一个参数执行一个命令时,shell将用该变量的值来代替变量名,如果变量的值包含特殊字符,如*,?,等,还会进行变量扩展。如果用””引号括起来,可以阻止bash对展开的变量进行路径名扩展。 删除变量用unset $St?nt. 2 )变量属性 a 、只读, readonly b 、 declare,typest -a 数组变量 -f 函数名变量 -i 整形变量 -r 只读 -x 输出变量 默认情况下,变量的值作为字符串存放。 3 )全局(环境)变量 全局变量全部用大写字母。 系统变量可以通过继承声明并初始化,也可以在shell启动时声明并初始化。可以通过命令行方式或者在初始化文件中为这些变量指定值。对于那些不由shell自动输出的变量,用户必须使用export