与shell相关的命令介绍
2022/1/20 7:18:04
本文主要是介绍与shell相关的命令介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.case语句
#!/usr/bin/bash echo "input passwd" read line case "$line" in [yY][eE][sS] | [yY] ) echo "this is yes";; no ) echo "this is no";; * ) echo "this is ***";; esac
2.函数
#1.函数的基本形式,与C语言函数形式基本相同,但是没有返回值 #$?代表最后一行语句的执行结果是为真还是为假 fun() { echo "fun run" echo "fun \$# = $#" echo "fun \$1 = $1" echo "fun \$2 = $2" echo "$?" } #2.函数如何传参,$1,$2放在函数中就是传给函数的第一个参数和第二个参数,在函数外边就是传给脚本的参数 #注意:脚本中没有主函数 main() { fun 123 abc } #3.脚本中的函数如何返回值 add() { if [ "$#" -eq 0 ] then return 0 fi if [ "$#" -eq 1 ] then return $1 fi x=$1 y=$2 num=`expr $x + $y` return $num } #第一种方法,打印出返回值 add 2 3 echo "add=$?" #第二种方式 add 2 3 a=$? echo "add=$a" #4.上边的例子中,在函数外边使用num也是可以的,在一行一行解释之后,解释器种有num,会一直存在,所以以下的打印方法也是可以的,如果在第一个num定义之后,在定义一个num,第二个num实际上也就是第一个num,对num的改变,改变的是第一个num,与C语言的语法是不一样的 echo "add=$num" #5.为了解决像上边的问题(可能未发生重命名的问题),可以用以下的两种方法解决 #第一种方法,利用local,则str只在此函数中生效 mytest() { local str="hello" echo "mytest::$str" } #第二种方法,利用unset,str在函数以外的地方就不可用了,也就是在解释器中将这个变量移除了 mytest() { str="hello" echo "mytest::$str" unset str }
3.脚本调用脚本
#脚本调用脚本 #方法:直接在一个脚本中写出另一个脚本的绝对路径或者相对路径 #假设有两个脚本文件 a.sh和b.sh #在a.sh中,调用b脚本,相对路径的前提条件是两个脚本在同一个目录下,调用b脚本b是a的子进程 echo "a.sh run pid=$$" MYSTR="hello" echo "MYSTR=$MYSTR" ./b.sh #执行a脚本,是否会打印出b脚本中MYSTR的值,答案是不会的 #因为两个脚本被不同的解释器执行,解释器的进程号都是不一样的 #在b.sh中 echo "b.sh run pid=$$" echo "MYSTR=$MYSTR" #要在b脚本中得到a脚本中MYSTR的值,有3种方法 #第1种方法,export将变量变成环境变量,在之后产生的子进程中都会继承环境变量 echo "a.sh run pid=$$" MYSTR="hello" export MYSTR ./b.sh #第2中方法,将MYSTR这个参数当作参数传递给 b.sh echo "a.sh run pid=$$" MYSTR="hello" ./b.sh MYSTR #在b.sh中 echo "b.sh run pid=$$" echo "MYSTR=$1" #第3种方法,以点命令去执行b脚本,意味要将b脚本放在a脚本的解释器种去执行,这两个脚本用的是同一个解释器 echo "a.sh run pid=$$" MYSTR="hello" . ./b.sh MYSTR #sourse与上边的 . 等价 sourse ./b.sh MYSTR #在b.sh中 echo "b.sh run pid=$$" echo "MYSTR=$MYSTR"
4.C程序调用脚本
#a.sh中的程序如下 #!/usr/bin/bash echo "a.sh run pid=$$" echo "a.sh argc=$#" scho "shell name:$0" for arg in $* do echo "arg=$arg" shift done exit 0 #C程序,里边去调用脚本,将C程序替换成了脚本解释器的bash进程 #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main() { printf("main pid=%d\n",getpid()); execl("./a.sh","b.sh","aa","hello","123",(char*)0); perror("execl error"); } #补充:在脚本调用C程序,直接在脚本中执行命令就行,例如:./main 或者 rm main.c,命令本身就是C程序
5.awk
功能:在文件中提取所需要的信息
适用情况
- 文件中每行内容的格式一致,比较像execl里边的二维数据,也像数据库中的表中的记录
- 第一列用$1表示,是第一个域,第二列用$2表示,是第二个域,以此类推,$0代表整行
- awk -F. 'print $1' file > file1
- 上边的语句-F后边的.代表以.来划分域,'print $1'代表打印file文件域1的内容,写入到file文件中。如果以空格来划分域,-F+分割域符号不用写
6.sed
功能:sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。无论命令是什么,sed并不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有定向到一个文件,将输出到屏幕。
用法:
- sed ‘3i\aaaaaaa' file > newfile:对file文件进行操作,在第三行新插入一行插入aaaaaaa,插入后将内容存入newfile文件中
- sed ‘3a\aaaaaaa' file > newfile:对file文件进行操作,在第三行后面插入一行aaaaaaa,实际上是插入到第四行,插入后将内容存入newfile文件中
- sed ‘3,5i\aaaaaaa' file > newfile:对file文件进行操作,在第三和第五行后面插入一行aaaaaaa,实际上是插入到第四行,插入后将内容存入newfile文件中
- sed -n ‘3,5i\aaaaaaa' file > newfile:将第三行至第五行的内容打印出
这篇关于与shell相关的命令介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27本地多文件上传的简单教程
- 2024-11-27低代码开发:初学者的简单教程
- 2024-11-27如何轻松掌握拖动排序功能
- 2024-11-27JWT入门教程:从零开始理解与实现
- 2024-11-27安能物流 All in TiDB 背后的故事与成果
- 2024-11-27低代码开发入门教程:轻松上手指南
- 2024-11-27如何轻松入门低代码应用开发
- 2024-11-27ESLint开发入门教程:从零开始使用ESLint
- 2024-11-27Npm 发布和配置入门指南
- 2024-11-27低代码应用课程:新手入门指南