shell学习之路
大shell,小python
修诡道的马前卒
世事洞穿而寡言,名利看淡而重学!
个人邮箱:[email protected]
展开
-
shell学习1:shell的简单介绍
在linux/unix操作系统中存在多种多类型的shell,而多数linux/unix系统默认使用shell为bash。所谓shell,是一种解释器,也是一种脚本语言,在每个shell脚本中都包含一个或者多个命令。 在计算机科学中,shell是指为使用者提供使用界面的软件(命令解释器)。它接收来自用户的命令,然后调用相应的应用程序处理用户键入的命令。同时shell也...原创 2019-03-12 16:00:56 · 595 阅读 · 1 评论 -
shell学习2:交互模式和非交互模式
shell的模式可分为交互模式和非交互模式。交互模式,就是需要和用户交互才可以将程序执行完毕。如下: 1 #!/bin/bash 2 # 3 CAT() 4 { 5 cat /etc/passwd | head -$line 6 } 7 echo -n "Input number of lines:" 8 read line 9 limit=6...原创 2019-03-12 16:56:46 · 2225 阅读 · 2 评论 -
shell学习3:升级bash
如果不想用命令升级的话,就下载源码,然后自己编译安装。1,解压gyz@debian:~$ tar -zxvf bash-4.4.tar.gz2,配置(默认则跳过)--prefix参数:该参数用于自定义安装目录,使用格式如:--prefix=/xxx/bbb;--enable-module参数:用于指定除默认安装的模块外,还要安装额外的模块,格式如:--prefxi=模块名1 ...原创 2019-03-13 13:15:37 · 577 阅读 · 1 评论 -
shell学习4:echo的使用
echo的用法:名称 echo - 显示一行文本概念 echo [短选项]... [字符串列表]... echo 长选项描述 将字符串列表中的字符输出到标准输出。 -n 不输出尾随的换行符 -e 启用解释反斜杠的转义功能 -E 禁用解释反斜杠的转义功能(默认) ...原创 2019-03-13 15:01:47 · 582 阅读 · 0 评论 -
shell学习6:特殊变量的使用
shell除了局部变量,环境变量之外,还有特殊变量。如$0,$1,$2等等。代码如下:#!/bin/bash#echo "the name of this script is $0"#if [ -n "$1" ]then echo "the first paramenter is $1"else echo "the first paramenter is NULL"f...原创 2019-03-14 08:05:40 · 534 阅读 · 0 评论 -
shell学习5:脚本跟踪,方便调试
利用set命令可以帮助完成代码,发现代码中的错误以及对代码进行修改和整理,使所编写的代码更为完整。在代码开始加入set -x,就会对执行代码进行跟踪。代码: 1 #!/bin/bash 2 # 3 set -x 4 TEST="test" 5 echo "tian quan zheng dao !" 6 echo 7 echo $TEST 8 t=1...原创 2019-03-14 08:05:16 · 632 阅读 · 0 评论 -
shell学习7:$@和$*的区别和联系
在没有用双引号将$@和$*包括在里面的时候,二者都表示所有参数;当有双引号将$@和$*包括在里面的时候,二者的区别就出来了,"$@"的参数列表是单独分开的,可以想象成数组,“$*”的参数列表是连成一片的,可以想象成是字符串,这两个知道首地址,都可以知道其他的元素,但是打印的时候就出现了不同。测试代码如下:#!/bin/bash#echo "print each param from ...原创 2019-03-14 13:25:59 · 905 阅读 · 1 评论 -
shell学习8:$#,$$,$?的作用
$#:看脚本的输入参数个数是多少;$$:脚本执行的进程号;$?:上个命令的退出状态,在shell的图形界面zenity里面用的比较多。$#测试代码: 1 #!/bin/bash 2 # 3 echo "test : \$#" 4 echo $# 5 echo "$#" 6 exit 0测试结果:gyz@debian:~/shelltest$ ....原创 2019-03-14 14:02:55 · 1012 阅读 · 1 评论 -
shell学习9:变量的定义
在linux系统中,变量值按变量的生存周期来划分,可以分为两类,即永久变量和临时变量。 如果需要定义永久性变量值,则需要修改配置文件,以使得变量永久生效; 如果定义临时变量,则可以使用export命令声明,所声明的值在关闭shell时失效。 在linux中设置变量的三种方法:1,在/ect/profile文件中定义变量 ...原创 2019-03-14 15:24:55 · 724 阅读 · 1 评论 -
shell学习10:declear和expr的用法介绍
declare是用于限定变量的属性。expr是对表达式求值。1,declare-r选项,定义一个只读变量;-i选项,定义一个整型变量:代码测试:1 #!/bin/bash 2 # 3 declare -r a=10 4 a=20 5 echo $a 6 echo "---------------" 7 declare -i b=10 8 b=2...原创 2019-03-14 16:02:30 · 1220 阅读 · 1 评论 -
shell学习11:程序运行时,询问语句以及read的用法
这个关键字是用来读取输入端的数据。测试代码:1 #!/bin/bash 2 # 3 echo "please enter your name:" 4 read name 5 echo $name 6 echo "----------------" 7 echo -n "do you enter your age?(yes/no)" 8 read res 9...原创 2019-03-15 09:07:34 · 1190 阅读 · 1 评论 -
shell学习12:case和select的用法
case 用法:case 待测试的变量或值 in条件测试区 1 命令区域1;;条件测试区2 命令区域2;;...;;esac测试代码:#!/bin/bash#echo "please enter your name:"read namecase "$name" in (gyz|gyh|gmz) echo "go...原创 2019-03-15 14:10:06 · 893 阅读 · 1 评论 -
shell学习13:break 2 和continue 2的用法
break 是终止一层循环,那break 2就是终止两层循环;continue 是跳过一次循环,但continue 2就是跳过两个循环。先看break的测试代码: 1 #!/bin/bash 2 # 3 for i in 1 2 3 4 5 4 do 5 for j in 1 2 3 4 5 6 do 7 echo "i*j=$i...原创 2019-03-15 14:38:35 · 3176 阅读 · 8 评论 -
shell学习14:until和while两者循环的区别
until 是[条件]为假,则执行;while则是[条件]为真,则执行。以下测试代码,只变化第4行,可观察执行结果的异同。-gt是大于的意思。测试代码: 1 #!/bin/bash 2 # 3 i=0 4 until [ $i -gt 5 ] 5 do 6 let square=i*i 7 echo "$i * $i = $square"...原创 2019-03-16 09:19:33 · 3666 阅读 · 1 评论 -
shell学习15:for循环,从终端读取循环序列
for循环分:1,常见for循环格式:1 #!/bin/bash 2 #1 3 for i in 1 2 3 4 5 4 do 5 echo $i 6 done 7 #2 8 for((i=1;i<=5;i++)) 9 do 10 echo "#$i:$i" 11 done 12 #3 13 for file in $(ls...原创 2019-03-16 09:41:50 · 988 阅读 · 1 评论 -
shell学习16:-eq,-ne,-gt,-lt,-ge,-le的意思
解释如下:-eq //等于 (equal)-ne //不等于 (not equal)-gt //大于 (greater than)-lt //小于 (less than)-ge //大于等于 (great equal)-le //小于等于 (less equa...原创 2019-03-16 09:59:03 · 2447 阅读 · 1 评论 -
shell学习17:查看某个文件是否存在(-f选项或者find)
way3比way1相对灵活一点,可以测试任何一个文件是不是存在,way2是用find命令查找的。1 #!/bin/bash 2 # 3 filename=a.txt 4 #way 1 5 if [ -f $filename ] 6 then 7 echo "$filename exists." 8 else 9 echo "no such f...原创 2019-03-16 10:22:03 · 1674 阅读 · 1 评论 -
shell学习18:if判断-e,-f,-f,-L,-r,-w,-x,-s,-nt,-ot的意思
filename为文件名-e (equal)-e filename, 判断文件是否存在-d (directory)-d filename,判断文件是否为目录-f (file)-f filename,判断文件是否为常规文件-L (link)-L filename,判断文件是否问链接文件-r (read)-r filename,判断文件是否可读-w (write)-...原创 2019-03-16 11:19:44 · 19554 阅读 · 9 评论 -
shell学习19:字符串比较(-n,-z)
TEST1和TEST2可以看出,=和==都可以用于字符串比较,而且不会改变字符串的值;TEST3,-n选项,如果字符串不是空的,则返回真,和TEST5一样;TEST4,-z选项,如果字符串是空的,则返回真。测试代码:#!/bin/bash#str1="test"str2="test2"str3=""echo "TEST1: ="if [ $str1 = $str2 ]...原创 2019-03-16 11:37:30 · 1358 阅读 · 1 评论 -
shell学习20:文件的重定向
说明:< 的作用有两个:1,将命令执行的结果导入到其他文件中,原来的文件内容将消失,格式:command > file;2,清空一个文件,格式: > file。<<的作用:就是将命令执行的结果追加到文件中,格式: command >> file。测试:1 #!/bin/bash 2 # 3 file_a=a.txt 4 fi...原创 2019-03-18 09:20:43 · 717 阅读 · 1 评论 -
shell学习21:函数(没有参数传递)
shell的函数比较简单,和其他语言一样,使用前,必须定义好。格式:function 函数名(){ 函数内容}1 #!/bin/bash 2 # 3 file_name=b.txt 4 function FILE_EXIST() 5 { 6 if [ -f $file_name ] 7 then 8 echo "$file...原创 2019-03-18 09:31:26 · 754 阅读 · 1 评论 -
shell学习22:函数(有参数传递)
shell的参数传递,第一个参数,第二个参数,第三个参数,......,等,用的是$1,$2,$3...,不过这个是局部的,也就是局限于在函数内用表示是传入的第几个参数,如果是在函数外,则用命令行传入的那个$n。测试代码: #!/bin/bash 2 # 3 function TestNumber() 4 { 5 echo "par1 is: $1" 6 ...原创 2019-03-18 09:43:28 · 1643 阅读 · 1 评论 -
shell学习23:函数(返回值)
shell函数的返回用的是关键字return,但是只能返回0-255的值的(本文测试1),如果要返回不在这个范围之内的数,则需要用全局变量(本文测试2)。测试1: 1 #!/bin/bash 2 # 3 function FunRet() 4 { 5 return $1 6 } 7 FunRet 254 8 echo $? 9 FunRet 25...原创 2019-03-18 10:14:44 · 666 阅读 · 1 评论 -
shell学习24:gawk(awk)的简单使用
gawk(gnu版的awk)功能比较强大,这里只说一些简单的,有特殊需要的,请看下面我的两个参考。gawk - pattern scanning and processing language翻译:模式扫描与处理语言写个小片段用于测试(test.txt):gyz@debian:~/shelltest$ cat test.txt We like programming, ...原创 2019-03-18 16:01:40 · 753 阅读 · 1 评论 -
shell学习25:exec命令的简单用法(重定向和循环)
exec 是 bash 的内置命令,exec是用被执行的命令行替换掉当前的shell进程,且exec命令后的其他命令将不再执行。1,先说说重定向除了>和>>有重定向的作用,exec也有,比如这个例子:是将标准输出的结果重定向到f.txt,不是显示到终端上。1 #!/bin/bash 2 # 3 stdout=f.txt 4 # 5 exec 5&...原创 2019-03-18 20:49:50 · 3403 阅读 · 2 评论 -
shell学习26:tee的用法(重定向)
tee命令可以将输出的结果传送到标准输出的同时,还保存一个副本(代码1);>是重定向,将输出的结果传送到其他的地方,而不是标准输出(代码2)。代码1:gyz@debian:~$ df -h | tee a.txt文件系统 容量 已用 可用 已用% 挂载点udev 217M 0...原创 2019-03-26 18:49:55 · 1065 阅读 · 0 评论 -
shell学习27:进度条,使用dialog
之前写过一篇文章,使用zenity做的(zenity图形界面),但是感觉没有dialog好,本文是用dialog做的。我这里是debian9.8系统,只带zenity,不带dialog,所以需要联网安装dialog:gyz@debian:~/der$ sudo apt-get install dialog代码1如下:gyz@debian:~/der$ dialog --gau...原创 2019-03-26 19:16:09 · 1108 阅读 · 0 评论 -
shell学习28:单项选择框,使用dialog
没有dialog的,sudo apt-get install dialog安装一个。代码如下: 1 #!/bin/bash 2 # 3 TMP="/tmp/radiolist.$$" 4 subject="choose filesystem type" 5 o_nums=3 6 # 7 EXT2="ext2" 8 EXT3="ext3" 9 EXT4=...原创 2019-03-26 20:50:00 · 1103 阅读 · 0 评论 -
shell学习29:子shell
这个和父子进程有点类似,在某种程度上可以提高工作效率。可以有多个子shell,但子shell里面的变量,父shell是用不到的,比如下面这个例子,子shell的x,父shell打印不出来(代码1),如果有相同的变量,各自用各自的,但是要尽量避免用相同的变量名,这个是子shell的一个缺陷。代码1: 1 #!/bin/bash 2 # 3 echo "father" 4 (...原创 2019-03-27 11:27:00 · 640 阅读 · 0 评论 -
shell学习30:if判断中各种(-a到-z)选项的意思
转载自:https://www.cnblogs.com/liupuLearning/p/6206415.html[ -a FILE ] 如果 FILE 存在则为真。 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。 [ -d FILE ] 如果 FILE 存在且是一个目录则为真...转载 2019-03-27 11:33:00 · 924 阅读 · 0 评论 -
shell学习31:脚本递归调用
递归,就是自身调用自身。脚本,打印函数名: 1 #!/bin/bash 2 # 3 function Fun() 4 { 5 echo "function name:$FUNCNAME" 6 Fun 7 } 8 Fun执行结果,使用ctrl+c结束,如下:...function name:Funfunction nam...原创 2019-03-27 11:46:26 · 753 阅读 · 0 评论 -
shell学习32:自动添加前面注释信息
详细的,至于内容是什么意思,请参阅我的博文(vim F7添加作者信息,文件修改完更改最后时间)。只需要在~/.vimrc里面添加下面这几句,保存关闭。新建一个.sh文件,然后按F7就可以出现:...原创 2019-03-27 12:04:42 · 799 阅读 · 0 评论 -
shell学习33:shell脚本自动登录ftp,并下载文件,电脑Assh到电脑B,并在电脑B上运行电脑A上的脚本
#!/bin/bashftppath="reliability/sniff/"usscript="upsnifferlog.sh"server1="xxx.xxx.xxx.xxx"#1,download the two filesftp -n<<!open $server1user snap mygehccd $ftppathlsbinarypromptg...原创 2018-10-25 16:24:20 · 1381 阅读 · 0 评论 -
shell学习34:shell实现提取字符串某个字符,压缩文件,并上传到服务器
#!/bin/bashkeyword="SYSTEM_NAME"confname="/tmp/reliabilityEcosystem.conf"datapath="/database/"sniffpath="/enggdata/SnifferLogs"currenttime=$(date "+%y%m%d%H%M%S")filename="cell${cellnum}_sniff.原创 2018-10-25 16:28:45 · 1505 阅读 · 0 评论 -
shell学习35:shell脚本自动登录ftp,并下载文件到本地,然后将新的文本追加到旧的文本当中
#!/bin/basholdfile="6.txt"newfile="7.txt"server="xxx.xxx.xxx.xxx"ftppath="reliability/sniff/"ftp -n<<!open $serveruser xxx xxxxcd $ftppathlsbinarypromptget $oldfileget $newfile...原创 2018-10-30 10:53:56 · 1881 阅读 · 0 评论 -
shell学习36:shell实现gui对话框,并且关闭某个进程或者终端
方法1:dialog --menu方法2:kdialog --title方法3:zenity --question下面采用方法3,#!/bin/bashzenity --question --timeout=60 --text="Do you have any questions?";if [ $? != 1 ]; then echo "yes";else...原创 2018-10-30 13:24:31 · 1814 阅读 · 0 评论 -
shell学习37:linux下使用shell脚本打开多个terminal并在其中运行程序的方法
gnome-terminal(是一种模拟终端器,一说是ubuntu的terminal就叫gnome-terminal)命令用于打开一个新的终端,直接在命令行$ gnome-terminal就可以打开一个新的终端,有一些常用参数:打开后自动最大化$ gnome-terminal --maximize打开后全屏$ gnome-terminal --full-screen设置标题$ gn...原创 2018-11-06 14:27:00 · 12891 阅读 · 3 评论 -
shell学习38:zenity图形界面之信息对话框和单复选对话框,以及while,for循环的练习
涵盖内容包括1,shell的while循环2,shell的for循环3,shell关于字符串的截取(精华之处)4,shell的选择分支语句if5,zenity信息对话框6,zenity单选对话框7,zenity复选对话框8,shell不传参数函数9,shell传参数函数#!/bin/bashCD="cd"LS="ls"RM="rm"CP="cp...原创 2018-11-09 14:38:54 · 1418 阅读 · 3 评论 -
shell学习39:zenity图形界面之进度条,滑动块,输入、警告、错误、显示对话框
1,程序执行进度条(这个比较好玩,有时候需要查看某个操作的进度,可以使用这种方法)#!/bin/bash#1,自建进度条#进度条内上要显示的内容( echo "50"; sleep 1 tar -zcvf aaa.tar.gz practice/*; sleep 1 echo "100"; sleep 1) |# percentage是进度条的起始点,auto-close是进...原创 2018-11-12 10:17:41 · 2053 阅读 · 0 评论