shell编程基础入门(实例)

合集下载

shell函数参数传递详解

shell函数参数传递详解

shell函数参数传递详解摘要:一、shell编程基础二、函数定义与调用三、参数传递方式四、实战案例解析正文:一、shell编程基础Shell是一种命令行解释器,主要用于执行脚本程序。

它基于Unix操作系统,可以理解为一种简化的、面向任务的编程语言。

在shell编程中,我们可以使用脚本文件来实现各种功能,如文件操作、系统管理等。

本文将重点介绍shell函数参数传递的相关知识,帮助大家更好地掌握shell编程。

二、函数定义与调用在shell脚本中,函数是一种组织代码的方式,它可以将一系列相关操作组合在一起,提高代码的可读性和可维护性。

函数的定义和使用类似于其他编程语言,如Python、Java等。

函数定义:使用`function`关键字,followed by 函数名、括号和括号内的参数列表。

例如:```bashfunction my_function() {echo "Hello, $1!"}```函数调用:使用函数名,可以带参数,也可以不带参数。

例如:```bashmy_function "World"```三、参数传递方式在shell脚本中,函数参数的传递主要有以下几种方式:1.位置参数:根据参数在函数定义中的位置来传递。

如:```bashfunction my_function() {echo "Hello, $1!"echo "Hello, $2!"}my_function "World" "Linux"```2.命名参数:通过为参数指定名称来传递。

如:```bashfunction my_function() {echo "Hello, $1!"echo "Hello, $2!"}my_function "World" "Linux" "Unix"```3.关联参数:通过关联数组传递。

shell脚本程序基础练习1

shell脚本程序基础练习1

1、编写shell脚本程序,从命令行读取三个位置参数的值,计算其乘积及平均值,并将结果输出。

2、编写shell脚本程序,计算梯形面积并输出结果,其中上底、下底的值从键盘输入,高是在终端命令行定义的全局变量。

3、编写shell脚本程序,从命令行输入一个任意的字符串变量,将该字符串添加到字符串“123abc”的‘3’和‘a’之间,然后把改变后的字符串写入到当前目录下的文件file 中,并查看file的内容。

4、编写shell脚本程序,使用管道命令统计文件/etc/services和/etc/ucf.conf中包含字符串“the”的地方共有多少行,将相加后的结果输出到命令行。

5、编写shell脚本程序,在不打开文件的前提下自动修改3题中file的内容,在abc后追加字符串,该字符串从键盘输入,要求追加字符串紧跟abc,不换行/*************1************** /***********2***********#!/bin/bash #!/bin/bashecho 这三个数的乘积是:echo 请输入梯形的上底和下底:expr $1 \* $2 \* $3 read a becho 这三个数的平均值是:echo 这个梯形的面积为:echo $[($1+$2+$3)/3] echo $[($a+$b)*g/2]/***********3************ /************4***********#!/bin/bash #!/bin/bashecho 请输入一个字符串:let a=$( grep the /etc/services | wc -l )read c echo $aecho "123${c}abc" > file let b=$(grep the /etc/ucf.conf | wc -l )cat file echo $becho "这两个数相加的结果为:$[$a+$b]"/*********5*************#!/bin/bashecho 请输入需要添加到file文件中的字符串:read cread s < fileecho $s$c > filecat file。

Genesis之C-shell 脚本编写入门

Genesis之C-shell 脚本编写入门
.... elif ....; then
.... else
.... fi 大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、 判断文件是否存在及是否可读等等... 通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的 空格。 [ -f "somefile" ] :判断是否是一个文件 [ -x "/bin/ls" ] :判断/bin/ls 是否存在并有可执行权限 [ -n "$var" ] :判断$var 变量是否有值 [ "$a" = "$b" ] :判断$a 和$b 是否相等
#!/bin/sh # The ticks are backticks (`) not normal quotes ('): tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
3) 流程控制
"if" 表达式 如果条件为真则执行 then 后面的部分: if ....; then
file lf.gz
这将返回:
lf.gz: gzip compressed data, deflated, original filename, last modified: Mon Aug 27 23:09:18 2001, os: Unix
我们利用这一点写了一个叫做 smartzip 的脚本,该脚本可以自动解压 bzip2, gzip 和 zip 类型的压缩文件:
该脚本首先判断 mailfolder 是否可读。如果可读则打印该文件中的 "From" 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个 问题,那就是我们必须有两个命令:

玩转Shell脚本编写如何处理用户输入参数

玩转Shell脚本编写如何处理用户输入参数

玩转Shell脚本编写如何处理用户输入参数Shell脚本是一种强大的工具,可以帮助我们自动化任务、批量处理文件等。

当我们编写Shell脚本时,经常需要与用户进行交互并处理用户输入的参数。

本文将介绍如何处理用户输入参数,以及一些常见的技巧和实践方法。

一、获取用户输入参数的基本方法在Shell脚本中获取用户输入参数通常使用$1、$2、$3等变量来表示。

例如,当用户在命令行执行脚本时,可以使用以下方式获取用户输入的参数:```#!/bin/bashecho "第一个参数为:$1"echo "第二个参数为:$2"echo "第三个参数为:$3"```在上述示例中,$1表示用户输入的第一个参数,$2表示用户输入的第二个参数,以此类推。

此外,还可以使用$#来获取用户输入参数的个数,使用$0来获取脚本的名称。

二、处理用户输入参数的技巧1. 判断参数个数在某些情况下,我们需要判断用户是否正确输入了所需的参数。

可以使用以下方法来判断参数个数:```#!/bin/bashif [ $# -lt 2 ]; thenecho "请输入至少两个参数"exit 1fi```上述示例中,$#表示用户输入参数的个数,-lt表示小于。

当参数个数小于2时,输出提示信息并退出脚本。

2. 参数默认值有时,用户可能没有输入某个参数,我们可以为其设置默认值。

可以使用以下方法来设置参数的默认值:```#!/bin/bash# 如果用户没有输入第一个参数,默认为"default"param1=${1:-"default"}echo "第一个参数为:$param1"```在上述示例中,使用${1:-"default"}的语法,如果用户没有输入第一个参数,则设置为"default"。

shell脚本100例、练习使用

shell脚本100例、练习使用

shell脚本100例、练习使⽤1、编写hello world脚本#!/bin/bashecho"hello world"2、通过位置变量创建linux系统账户和密码#!/bin/bash#$1是执⾏脚本第⼀个参数 $2是执⾏脚本第⼆个参数useradd "$1"echo"$2" | passwd --stdin "$1"#测试脚本[root@template-host sh1]# sh2.sh aaa 123Changing password for user aaa.passwd: all authentication tokens updated successfully.#测试登录[root@template-host sh1]# su - aaa[aaa@template-host ~]$3、每周五使⽤tar命令备份 /var/log下的所有⽇志⽂件#!/bin/bashtar -czPf log-`date +%y%m%d`.tar.gz /var/log #加P是因为如果不加会出现错误:tar: Removing leading `/' from member names date和+之间注意有空格。

修改系统参数[root@template-host sh1]# crontab -e00 03 * * 5 /data/sh1/3.sh4、⼀键部署LNMP(RPM包版本)#!/bin/bash#此脚本需要提前配置yum源,否则⽆法配置成功。

本脚本使⽤于7.4yum -y install httpdyum -y install mariadb mariadb-devel mariadb-serveryum -y install php php-mysqlsystemctl start httpd mariadb #启动httpd、mariadbsystemctl enable httpd mariadb #加⼊开机⾃启动systemctl status httpd mariadb #查看是否成功5、实时监控本机硬盘内存剩余空间,剩余内存空间⼩于500M,根分区剩余空间⼩于1000M时,发送警报信息到命令⾏#!bin/bash#提取分区剩余空间单位:kbdisk_size=$(df / | awk'/\//{print $4}')#提取内存空间单位Mmem_size=$(free -m | awk'/Mem/{print $4}')while :doif [ $disk_size -le 512000 -o $mem_size -le 1024 ];thenecho"警报:资源不⾜"sleep5fidone6、随机⽣成⼀个100以内的随机数,提⽰⽤户猜数字,提⽰⽤户猜⼤了、猜⼩了、猜对了,直⾄⽤户猜对,脚本结束。

Shell脚本编写如何处理用户输入和交互

Shell脚本编写如何处理用户输入和交互

Shell脚本编写如何处理用户输入和交互Shell脚本是一种用来编写和执行命令的脚本语言。

用户输入和交互是Shell脚本中重要的组成部分,它允许脚本与用户之间进行动态的信息传递和交流。

本文将介绍如何在Shell脚本中处理用户输入和实现交互功能。

一、获取用户输入获取用户输入是Shell脚本中常见的操作,可以通过read命令实现。

read命令允许脚本从标准输入中读取用户输入,并将其存储到一个变量中。

以下是一个简单的示例:```shell#!/bin/bashecho "请输入您的姓名:"read nameecho "欢迎您,$name!"```在上述示例中,脚本首先通过echo命令打印提示信息,然后使用read命令获取用户输入,并将其存储到变量name中。

最后,通过echo命令将欢迎信息与用户输入进行拼接并打印出来。

二、处理用户输入Shell脚本可以通过if语句等条件判断语句来处理用户输入。

根据用户的输入进行不同的操作是编写脚本时常见的需求。

以下是一个示例:```shell#!/bin/bashecho "请选择您的操作:"echo "1. 显示系统信息"echo "2. 显示磁盘使用情况"echo "3. 显示当前时间"read choiceif [ "$choice" == "1" ]; thenecho "系统信息:"uname -aelif [ "$choice" == "2" ]; thenecho "磁盘使用情况:"df -helif [ "$choice" == "3" ]; thenecho "当前时间:"dateelseecho "无效的选项"fi```在上述示例中,脚本首先打印一个操作菜单,然后使用read命令获取用户的选择,并将其存储到变量choice中。

shell脚本教程详细讲解(共80张PPT)

shell脚本教程详细讲解(共80张PPT)
o :在光标所在行下新增一列并进入输入模式。 O: 在光标所在行上方新增一列并进入输入模式。
冒号进入行命令模式,输入set nu可设置vi显示行号
10
5、命令模式下的操作:删除与修改
x: 删除光标所在字符 dw 删除一个单词 dd :删除光标所在的行 s:删除光标所在字节,
并进入输入模式
d光标键:
1. mkdir /tmp/vitest
2. cd /tmp/vitest
3. cp /etc/man.config .
4. vi man.config 5. :set nu
6. 先按下 58G 再按下 40→ 会看到 /dir/bin/foo 这个字样在双引号内

7. 先执行 1G 或 gg 后,直接输入 /bzip2 8. 直接执行 :50,100s/man/MAN/gc 即可 9. (1)简单的方法可以一直按 u 恢复到原始状态,(2)使用不储存离开
vi –R file_name,以只读方式打开文件
8
3、VI的退出
冒号进命令行模式下:
:q! 不存档强制退出。
:w 保存但不退出,w(rite)后可加所要存档的文档 名。
:wq 存档后退出。
命令模式下按zz,功能与 :wq 相同。
:x 与:wq相同
命令模式:
ZZ、ZQ
保存/不保存退出
9
4、怎么编辑
函数
{
echo "Enter Your name:"
read name
读取来自键盘输入的变量
echo "Hello $name"
}
echo "programme starts here..." 主过程

shell脚本基础(又长又详细)

shell脚本基础(又长又详细)

shell脚本基础(⼜长⼜详细)第⼗⼀章 BASH脚本(⼀)常见的Shell变量的类型包括环境变量、预定义变量、位置变量、⽤户⾃定义变量。

本节将分别学习这四种Shell变量的使⽤。

11. 1、 Shell的环境变量通过set命令可以查看系统中所有Shell变量(包括环境变量和⽤户⾃定义变量),由于内容输出较多,建议使⽤less命令分页查看。

常⽤环境变量:PATH 决定了shell将到哪些⽬录中寻找命令或程序HOME 当前⽤户主⽬录HISTSIZE 历史记录数LOGNAME 当前⽤户的登录名USER 当前⽤户名UID 当前⽤名的UIDHOSTNAME 指主机的名称SHELL 前⽤户Shell类型LANGUGE 语⾔相关的环境变量,多语⾔可以修改此环境变量MAIL 当前⽤户的邮件存放⽬录PS1 基本提⽰符,对于root⽤户是#,对于普通⽤户是$PS2 附属提⽰符,默认是“>”例:以分号分隔,显⽰当前的⽤户的⽤户名、宿主⽬录、登录Shell。

例:查看当前命令的搜索路径,并将/opt/bin⽬录添加到现有搜索路径中去,从⽽可以直接执⾏此⽬录中的命令。

环境变量的配置⽂件⽤户可在当前的Shell环境中直接为环境变量赋值,但需要长期变更所使⽤的某个环境变量时,可以修改配置⽂件。

在Linux系统中,⽤户环境变量的设置⼯作习惯上在 /etc/profile ⽂件及宿主⽬录中 .bash_profile⽂件中进⾏,前者称为全局配置⽂件(对所有⽤户起作⽤),后者称为⽤户配置⽂件(允许覆盖全局配置)。

例:在当前⽤户环境中,将⽤于限制历史命令的环境变量HISTSIZE的值改为100。

例:编辑“~/.bash_profile”⽂件,修改PATH的设置,以便⽤户在下次登录后能够使⽤服务/opt/bin ⽬录作为默认的搜索路径。

# vi /root/.bash_profielPATH=$PATH:$HOME/bin:/opt/binExport PATH11.2 Shell位置变量为了在使⽤Linux程序时,⽅便通过命令⾏给程序提供操作参数,Bash引⼊了位置变量的概念。

linux基本shell语法

linux基本shell语法

linux基本shell语法1. 执行命令:输入命令后按下回车键即可执行。

2. 变量赋值:使用等号(=)将值赋给变量,例如:`variable_name=value`3. 输出变量:使用`echo`命令输出变量的值,例如:`echo variable_name`4. 注释:使用井号(#)来添加注释,注释会被解释器忽略。

5. 重定向输入输出:使用重定向符号来将命令的输入输出重定向到文件中,例如:`command > output_file` (将命令的输出重定向到文件)或 `command < input_file` (将文件内容作为命令的输入)6. 管道:使用竖线(|)将前一个命令的输出作为后一个命令的输入,例如:`command1 | command2` (将command1的输出作为command2的输入)7. 执行前一个命令的退出状态码:使用美元符号和问号(?)获取前一个命令的退出状态码(0表示命令成功执行),例如:`echo ?`8. 条件判断:使用`if`语句进行条件判断,例如:```if conditionthencommand1elsecommand2fi```9. 循环:使用`for`和`while`循环进行迭代操作,例如:```for item in listdocommanddone``````while conditiondocommanddone```10. 函数定义和调用:使用`function`关键字定义函数,例如:```function function_name {command1command2return value}``````function_name```以上是一些基本的Linux shell语法,还有更多高级用法可以进一步学习和探索。

Shell编程入门-ongzh-2003(初稿)

Shell编程入门-ongzh-2003(初稿)
中国电信广东公司 广东亿迅科技有限公司 综 合 部
为什么要进行Shell编程
建立一个脚本 Shell命令和流程控制 Shell脚本实例
1 中国电信广东公司 广东亿迅科技有限公司
综合ຫໍສະໝຸດ 部为什么要进行Shell编程?
2 中国电信广东公司 广东亿迅科技有限公司



为什么要进行Shell编程
建立一个脚本 Shell命令和流程控制 Shell脚本实例
cat text.file | sed 's/ubuntu/Ubuntu/' > newtext.file
awk 用来提取文本文件中的字段。缺省的字段分割 符是空格,可以使用 -F 指定其它分割符;
awk
如:cat file.txt | awk -F, '{print $1 "," $3 }',这里我 们使用 , 作为字段分割符,同时打印第一和第三个字 段。
为$*:变量variable依次取位置参数的值
29 中国电信广东公司 广东亿迅科技有限公司



for语句示例
30 中国电信广东公司 广东亿迅科技有限公司



while语句
只要expression的值为真,则进入循环体,执行command-1ist中 的命令,然后再做条件测试,直到测试条件为假时才终止while语
正则表达式中可以使用通配符(* ?[]…)
如果一个正则表达式是由多个模式组成,那么各模式之间应以竖线“|” 隔开;表示各模式是“或”关系,即只要给定字符串与其中一个模式相配
,就会执行其后的命令表
各正则表达式是唯一的,不应重复出现 case语句以关键字case开头,以关键字esac结束

shell编程题经典100例

shell编程题经典100例

shell编程题经典100例 1. 显示当前路径```shellpwd```2. 列出当前目录中的文件和目录```shellls```3. 创建一个新的目录```shellmkdir <目录名> ```4. 删除一个目录 ```shellrmdir <目录名> ```5. 删除一个文件 ```shellrm <文件名>```6. 复制一个文件```shellcp <源文件> <目标文件> ```7. 移动一个文件```shellmv <源文件> <目标文件> ```8. 重命名一个文件```shellmv <旧文件名> <新文件名> ```9. 创建一个符号链接```shellln -s <源文件> <符号链接> ```10. 显示一个文件的详细信息 ```shellls -l <文件名>```11. 显示一个目录的详细信息 ```shellls -ld <目录名>```12. 查找一个文件```shellfind <路径> -name <文件名> ```13. 搜索文本字符串```shellgrep <字符串> <文件>```14. 显示一个文件的指定行```shellhead -n <行数> <文件>```15. 显示一个文件的最后几行 ```shelltail -n <行数> <文件>```16. 比较两个文件```shelldiff <文件1> <文件2>```17. 合并两个文件```shellcat <文件1> <文件2> > <输出文件> ```18. 运行一个命令```shellcommand <参数>```19. 管道命令```shellcommand1 | command2```20. 重定向输出```shellcommand > <输出文件> ```21. 重定向输入```shellcommand < <输入文件> ```22. 使用环境变量```shellecho $PATH```23. 设置环境变量```shellPATH=/usr/bin:/bin export PATH```24. 创建一个脚本```shell#!/bin/bash# 脚本内容```25. 运行一个脚本 ```shell./<脚本名>```26. 调试一个脚本 ```shellbash -x <脚本名> ```27. 使用case语句 ```shellcase $1 in"start")# 执行启动命令;;"stop")# 执行停止命令;;esac```28. 使用if语句```shellif [ $1 -gt 10 ]; then# 执行条件为真的命令 else# 执行条件为假的命令 fi```29. 使用for循环```shellfor i in 1 2 3 4 5; do # 迭代执行命令done```30. 使用while循环```shellwhile [ $i -lt 10 ]; do # 循环执行命令i=$((i+1))done```31. 使用until循环```shelluntil [ $i -gt 10 ]; do # 循环执行命令i=$((i+1))done```32. 使用函数```shellfunction my_function() { # 函数体}my_function```33. 使用数组```shellarr=(1 2 3 4 5)echo ${arr[2]}```34. 使用字典```shelldeclare -A dictdict["name"]="John Doe" echo ${dict["name"]}```35. 使用正则表达式```shellif [[ $string =~ ^[[:alpha:]]+$ ]]; then # 匹配以字母开头的字符串fi```36. 使用管道符```shellls | grep "txt"```37. 使用换行符```shellecho -e "Line 1\nLine 2"```38. 使用引号```shellecho "This is a string with spaces"```39. 使用转义字符```shellecho "This is a string with a \n newline" ```40. 使用注释```shell# 这是一行注释```41. 使用条件?:```shellresult=$(if [ $condition ]; then echo "true"; else echo "false"; fi)```42. 使用切片```shellecho "${string:0:3}"```43. 使用join命令```shellecho $( IFS=","; echo "${array[]}" ) ```44. 使用read命令```shellread -p "Enter your name: " name```45. 使用变量赋值```shellvar=$(expr 1 + 2)```46. 使用算术运算```shell(( i++ ))```47. 使用逻辑运算符```shellif [[ $condition1 && $condition2 ]]; then # 条件 1 和条件 2 都为真fi48. 使用比较运算符```shellif [[ $var -gt 10 ]]; then # var 大于 10fi```49. 使用测试命令```shellif test -f <文件>; then# 文件存在```50. 使用getopts解析命令行参数 ```shellwhile getopts ":ab:" opt; do case $opt ina)flag_a=true;;b)arg_b=$OPTARG;; esac done```。

linuxshell编程案例

linuxshell编程案例

linuxshell编程案例Linux Shell编程案例Shell编程是一种在Linux操作系统中使用Shell脚本语言编写脚本的技术。

通过Shell编程,我们可以自动化执行一系列的命令,提高工作效率。

下面,我将介绍一个实际的Shell编程案例,帮助大家更好地理解和应用Shell编程。

案例背景:假设我们是一家电商公司的运维工程师,每天需要备份公司的数据库,并将备份文件上传到远程服务器上。

为了简化这个繁琐的过程,我们可以使用Shell编程来实现自动备份和上传。

案例步骤:1. 创建Shell脚本文件首先,我们需要创建一个Shell脚本文件,比如命名为backup.sh。

可以使用任何文本编辑器来创建该文件。

2. 编写脚本内容在backup.sh文件中,我们需要编写一系列的命令来实现备份和上传的功能。

下面是一个简单的示例:```shell#!/bin/bash# 定义备份文件名和路径backup_file="db_backup_$(date +%Y%m%d).sql"backup_path="/path/to/backup"# 备份数据库mysqldump -u username -p password database >$backup_path/$backup_file# 上传备份文件到远程服务器scp $backup_path/$backup_file user@remote_server:/path/to/backup```在这个示例中,我们首先定义了备份文件的名称和路径。

然后,使用`mysqldump`命令备份数据库,并将备份文件保存到指定的路径中。

最后,使用`scp`命令将备份文件上传到远程服务器上。

3. 添加执行权限在终端中,使用`chmod +x backup.sh`命令为脚本文件添加执行权限。

4. 执行脚本在终端中,使用`./backup.sh`命令执行脚本。

Linux-Shell基础(变量,字符串,数组)

Linux-Shell基础(变量,字符串,数组)

Linux-Shell基础(变量,字符串,数组)⼀. 什么是shell1. shell是⼀个⽤C语⾔编写的程序,它是⽤户使⽤Linux的桥梁,⼜是⼀种程序设计语⾔。

2. Shell 是指⼀种应⽤程序,这个应⽤程序提供了⼀个界⾯,⽤户通过这个界⾯访问操作系统内核的服务。

3. shell脚本是⼀种shell编写的脚本程序 常见的shell种类Bourne Shell(/usr/bin/sh或/bin/sh)Bourne Again Shell(/bin/bash)C Shell(/usr/bin/csh)K Shell(/usr/bin/ksh)Shell for Root(/sbin/sh# 在⼀般情况下,⼈们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。

编写⼀个简单的shell脚本 #!是⼀种约定的标记,它告诉系统这个脚本需要使⽤什么解释器执⾏,即使⽤哪⼀种shell echo 命令⽤于向窗⼝输出⽂本。

#!/bin/bashecho 'hello word' 如何运⾏shell脚本 1. 作为可执⾏程序 注意: ⼀定要写成 ./test.sh,⽽不是 test.sh,运⾏其它⼆进制的程序也⼀样,直接写 test.sh,linux 系统会去 PATH ⾥寻找有没有叫test.sh 的,⽽只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH ⾥,你的当前⽬录通常不在 PATH ⾥,所以写成 test.sh 是会找不到命令的,要⽤ ./test.sh 告诉系统说,就在当前⽬录找。

chmod +x ./test.sh #使脚本具有执⾏权限./test.sh #执⾏脚本 2. 作为解释器参数 这种运⾏⽅式是,直接运⾏解释器,其参数就是 shell 脚本的⽂件名,这种⽅式运⾏的脚本,不需要在第⼀⾏指定解释器信息,写了也没⽤。

Shells编程快速入门(二) 之Bourne Shell

Shells编程快速入门(二) 之Bourne Shell

Shells编程快速入门(二) 之Bourne ShellBourne shell 例子:1 #!/bin/sh2 # The Party Program––Invitations to friends from the "guest" file3 guestfile=/home/jody/ellie/shell/guests4 if [ ! –f "$guestfile" ]5 then6 echo "`basename $guestfile` non–existent"7 exit 18 fi9 PLACE="Sarotini's"; export PLACE10 Time=`date +%H`Time=`expr $Time + 1`11 set cheese crackers shrimp drinks "hot dogs" sandwiches12 for person in `cat $guestfile`do13 if [ $person =~ root ]then14 continue15 else16 # mail –v –s "Party" $person <<- FINIS17 cat <<-FINISHi ${person}! Please join me at $PLACE for a party!Meet me at $Time o'clock.I'll bring the ice cream. Would you please bring $1 andanything else you would like to eat? Let me know if youcan make it. Hope to see you soon.Your pal,ellie@`hostname`FINIS18 shift19 if [ $# –eq 0 ]then20 set cheese crackers shrimp drinks "hot dogs" sandwichesfifi21 doneecho "Bye..."解释:1.让kernel知道是在运行Bourne shell。

c语言 shell程序源码

c语言 shell程序源码

c语言shell程序源码摘要:1.引言2.C 语言简介3.Shell 程序简介4.Shell 程序源码实例5.总结正文:C 语言是一种广泛应用于系统编程和应用开发的编程语言。

它具有高效性、灵活性和强大的功能,使得许多开发者和学习者都选择它作为编程入门语言。

在C 语言的学习过程中,编写Shell 程序是一个很好的实践项目,可以帮助我们更好地理解编程的基本原理和操作系统的运行机制。

Shell 程序,又称壳层程序,是一种用于管理操作系统资源的脚本程序。

它可以让用户以一种简洁、直观的方式与操作系统进行交互。

Shell 程序的编写通常使用C 语言或者Python 等编程语言。

在这里,我们将通过一个简单的C 语言Shell 程序源码实例,来了解如何编写一个基本的Shell 程序。

以下是一个简单的C 语言Shell 程序源码实例:```c#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main() {char command[100];printf("请输入要执行的命令:");fgets(command, sizeof(command), stdin);command[strcspn(command, "")] = 0; // 去掉输入中的换行符if (system(command) == 0) {printf("命令执行成功!");} else {printf("命令执行失败!");}return 0;}```这个程序首先包含了必要的头文件,然后定义了一个`main`函数作为程序的入口。

在`main`函数中,程序提示用户输入要执行的命令,并使用`fgets`函数从标准输入读取一行命令。

为了防止命令中包含换行符,我们使用`strcspn`函数去掉命令字符串中的换行符。

Shell 编程基础[原创]ssss

Shell 编程基础[原创]ssss

Shell:是一个独立于OS的应用程序,是一个具有交互性的命令行解释器。

1、Shell的作用:解释键入的命令以及执行的一些特定的功能,并传到内核执行。

2、Shell的功能:-命令的搜索与执行-变量的值的替换-命令的替换-文件名的补齐-控制I/O重定向和Pipe-提供解释性的编程接口(包括测试、分支和循环)3、常用的Shell:- Bourne Shell(/usr/bin/sh)- C Shell(/usr/bin/csh)- Korn Shell(/usr/bin/ksh)- Shell for Root(/sbin/sh)- Restricted Bourne Shell(/usr/bin/rsh)- Restricted Korn Shell(/usr/bin/rksh)[注](1)、某些系统有自带的Shell,比如SCO UNIX系统有SCO Shell (/usr/bin/scosh)。

(2)、使用限制版Shell的用户不能进行的操作:-修改目录-重设PATH环境变量-在路径中使用/-重定向输出别名化:主要用于方便地输入长路径名。

$ alias [name [=string]] # Aliasing其中:name --命令的别名,string --原命令(如果有空格,用… ‟括起来)。

$ alias #显示当前定义的所有别名$ alias name #列出某特定别名的值$ unalias name #关闭别名[例]别名的使用:$ alias go = 'cd '$ alias there = /home/cheyenne/programs/shell/pgs_en_c/server.c $ go there ; pwd-->命令历史:1、最早由C Shell(BSD UNIX)提出。

2、Korn Shell下的history命令:-缺省显示最近输入的16个命令-每行用命令号开头CODE$ history -n#显示最后n个命令$ history a z#显示从第a条命令到第z条命令3、HISTSIZE参数:定义可以访问历史命令的数据(缺省:128)。

简单的shell 输入参数

简单的shell 输入参数

简单的shell 输入参数
在Shell编程中,输入参数是指在运行脚本时向脚本传递的值。

这些参数可以在Shell脚本中使用,以便根据传递的参数执行相应
的操作。

在Shell中,我们可以使用特定的变量来处理输入参数。

常见的输入参数变量包括$1、$2、$3等,它们分别代表传递给脚本
的第一个、第二个、第三个参数,依此类推。

举个例子,假设有一个名为myscript.sh的Shell脚本,我们
可以通过以下方式向其传递参数:
./myscript.sh arg1 arg2 arg3。

在脚本内部,我们可以通过$1、$2、$3来访问这些参数的值,
例如:
#!/bin/bash.
echo "第一个参数为: $1"
echo "第二个参数为: $2"
echo "第三个参数为: $3"
当我们执行./myscript.sh arg1 arg2 arg3时,将会输出:
第一个参数为: arg1。

第二个参数为: arg2。

第三个参数为: arg3。

除了$1、$2、$3,我们还可以使用特殊变量$#来获取传递给脚本的参数个数,使用$@来获取所有参数的值,以及使用$0来获取脚本的文件名。

另外,我们还可以在脚本中使用getopts命令来处理带有选项的参数,这样可以使脚本更加灵活和易用。

总的来说,Shell脚本中的输入参数是非常重要的,它们使得我们的脚本可以接受外部输入并作出相应的处理,从而实现更加通用和灵活的脚本编程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应。

一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率。

要达到这样的目的,通常我们利用shell程序或者shell脚本来实现。

一、简介Shell编程有很多类似C语言和其他程序语言的特征,但是又没有编程语言那样复杂。

Shell程序就是放在一个文件中的一系列Linux命令和实用程序,在执行的时候,通过Linux 一个接着一个地解释和执行每个命令。

下面我们来看一个简单的shell程序:1、首先建立一个内容如下的文件,名字为date,将其存放在目录下的bin子目录中。

#Program date#usageto ::show the date in this way (注释)echo “Mr.$USER,Today is:”echo date “+%B%d%A”echo “Whish you a lucky day !”2、编辑完该文件之后它还不能执行,我们需要给它设置可执行权限。

使用如下命令:chmod +x date通过以上过程之后,我们就可以像使用ls命令一样执行这个shell程序.[beichen@localhost bin]$ dateMr.beichen,Today is:January 13 FridayWhish you a lucky day !为了在任何目录里都可以执行这个程序,可以将bin的这个目录添加到路径中去。

[beichen@localhost bin]$ PA TH=$PA TH:$HOME/bin(注:这里的$HOME代替的是/home/beichen,而bin目录是自己建的一个目录)另外一种执行date的方法就是把它作为一个参数传给shell命令:[beichen@localhost /]$ bash dateMr.beichen,Today is:January 13 FridayWhish you a lucky day !尽管在前面我们使用chmod +x date将date设置为可执行,其实不设置也没有关系,但在Linux里执行它,需要先告诉系统它是一个可执行的脚本。

[beichen@localhost /]$ .dateMr.beichen,Today is:January 13 FridayWhish you a lucky day !即在date前面加上一个点”.”,并且用空格与后面的shell脚本的文件名隔开。

当然,不推荐这样做。

二、shell参数如同ls 命令可以接受目录等作为它的参数一样,在shell编程时同样可以使用参数。

Shell 有位置参数和内部参数。

1、位置参数由系统提供的参数称为位置参数。

位置参数的值可以用$N得到,N是一个数字,如果为1,即$1.类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始。

第0号为程序名字,从1开始就表示传递给程序的参数。

如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推。

2、内部参数上述过程中的$0是一个内部变量,它是必须的,而$1则可有可无。

和$0一样的内部变量还有以下几个。

$# ----传递给程序的总的参数数目$? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。

$* ----传递给程序的所有参数组成的字符串。

下面举例进行说明:建立一个内容为如下的程序P1:echo “Program name is $0”echo “There are totally $# parameters passed to this program”echo “The last is $?”echo “The parameters are $*”执行后的结果如下:[beichen@localhost bin]$ P1 this is a test program //传递5个参数Program name is /home/beichen/bin/P1 //给出程序的完整路径和名字There are totally 5 parameters passed to this program //参数的总数The last is 0 //程序执行结果The parameters are this is a test program //返回有参数组成的字符串下面我们利用内部变量和位置参数编写一个名为del的简单删除程序:#name: del#author: liangnian#this program to compress a file to the dustbinif test $# -eq 0thenecho “Please specify a file!”elsegzip $1 //先对文件进行压缩mv $1.gz $HOME/dustbin //移动到回收站echo “File $1 is deleted !”fi三、变量表达式在上面我们编写的小程序中我们用到了一个关键字test,其实它是shell程序中的一个表达式?D?D比较(test)。

通过和shell提供的if等条件语句(后面我们会介绍)相结合我们可以方便的完判断。

其用法如下:test 表达式表达式所代表的操作符有字符串操作符、数字操作符、逻辑操作符以及文件操作符。

其中文件操作符是一种shell独特的操作符,因为shell里的变量都是字符串,为了达到对文件进行操作的目的,于是才提供了这样的一种操作符。

1、字符串比较作用:测试字符串是否相等、长度是否为零,字符串是否为NULL(注:bash区分零长度字符串和空字符串)常用的字符穿操作符有:= 比较两个字符串是否相同,同则为“是”!= 比较两个字符串是否相同,不同则为“是”-n 比较字符串长度是否大于零,如果大于零则为“是”-z 比较字符串的穿度是否等于零,如果等于则为“是”2、数字比较这里区别于其他编程语言,test语句不使用>?类似的符号来表达大小的比较,而是用整数式来表示这些。

-eq 相等-ge 大于等于-le 小于等于-ne 不等于-gt 大于-lt 小于3、逻辑操作! 反:与一个逻辑值相反的逻辑值-a 与(and):两个逻辑值为“是”返回值才为“是”,反之为“否”-o 或(or):两个逻辑值有一个为“是”,返回值就为“是”4、文件操作文件测试表达式通常是为了测试文件的信息,一般由脚本来决定文件是否应该备份、复制或删除。

由于test关于文件的操作符有很多,我们只列举一些常用的。

-d 对象存在且为目录返回值为“是”-f 对象存在且为文件返回值为“是”-L 对象存在且为符号连接返回值为“是”-r 对象存在且可读则返回值为“是”-s 对象存在且长度非零则返回值为“是”-w 对象存在且可写则返回值为“是”-x 对象存在且可执行则返回值为“是”file1 ?Cnt(-ot) file2 文件1比文件2新(旧)四、循环结构语句shell常见的循环语句有for循环、while循环、until循环for 循环语法:for 变量in 列表do操作done注:变量是要在循环内部用来指代当前所指代的列表中的那个对象的。

列表是在for 循环的内部要操作的对象,可以是字符串也可以是文件,如果是文件则为文件名。

例:删除垃圾箱中的所有.gz文件#delete all file with extension of “gz” in the dustbinfor I in $HOME/dustbin/*.gzdorm ?Cf $iecho “$i has been deleted!”done执行结果如下:[beichen@localhost bin]$.f_rmgz/home/beichen/dustbin/nessus-4.0.0.2.tar.gz has been deleted!/home/beichen/dustbin/gftp-2.2.1.tar.gz has been deleted!While循环语法:while 表达式do操作done只要while表达式成立,do和done之间的操作就一直会进行。

until循环语法:until 表达式do操作done重复do和done之间的操作直到表达式成立为止。

例:#test until#add from 1 to 100total=0num=0until test num ?Ceq 100dototal=`expr $total + $num` //注意,这里的引号是反引号,下同num=`expr $num+1`doneecho “The result is $total”执行结果如下:[beichen@localhost bin]$untilThe result is 5050!五、条件语句Shell程序中的条件语句主要有if语句、case语句;If语句语法:if 表达式1 then操作elif 表达式2 then操作elif 表达式3 then操作…..else操作fiLinux里的if的结束标志是将if反过来写成fi;而elif其实是else if的缩写其中elif理论上可以有无限多个。

Case语句语法:case 字符串in值1|值2)操作::值3|值4)操作::值5|值6)操作::*}操作::esaccase的作用就是当字符串与某个值相同是就执行那个值后面的操作。

如果同一个操作对于多个值,则使用”|”将各个值分开。

在case的每一个操作的最后面都有两个”::”,分号是必须的。

例:case $USER inbeichen)Echo “You are beichen!”;;liangnian)echo “You are liangnian”; //注意这里只有一个分号echo “Welcome!”;; //这里才是两个分号root)echo “You are root!:echo Welcome!”;; //将两命令写在一行,用一个分号作为分隔符*)echo “Who are you?$USER?”;;esac执行结果:[liangnian@localhost bin]$ testYou are liangnianWelcome!关于shell编程基础的东西就介绍这么多,如果你想更进一步了解shell编程的知识,请查阅相关书籍。

如何远程杀死僵进程?所谓“僵进程”是指处于睡眠中,而且没用的进程。

在进行并行计算时经常会有僵进程产生。

由于用top 看不到“僵进程”,所以写了如下一个叫做“rkill”的shell 文件:#!/bin/tcshecho " Input start number of node: "echo " Input end number of node: "set N2="$<"echo " Input the NAME of program"set pname="$<"echo "**********************************************************"while($N1 <= $N2)set h='t'$N1set ppid=`rsh $h ps -ef | grep $pname | awk '{print $2}' `echo "rsh $h kill $ppid"rsh $h kill $ppid@ N1++endecho "**********************************************************"如何将一个index 文件中的空链接删除?在目录/doc/Art_and_Photos/photo/NASA-Astronomy_Picture_of_the_Day 中只有有限的几个文件,而archivepix.html 文件中却链接了两千多个文件,我们的目标就是要把不存在的文件链接删除掉。

相关文档
最新文档