shell编程范例之字符串操作
shell strip 用法
shell strip 用法
`shell strip`函数是用于去除字符串开头和结尾的空白字符(包括空格、制表符和换行符等)的函数,它是`bash`中的一个命令。
其语法格式如下:
```bash
${var#pattern} # 去掉变量开头的 pattern
${varpattern} # 去掉变量开头的 pattern,直到不能再去为止
${var%pattern} # 去掉变量结尾的 pattern
${var%%pattern} # 去掉变量结尾的 pattern,直到不能再去为止
```
其中,`#`表示去掉匹配`pattern`的最短部分,而``则表示去掉匹配`pattern`的最长部分。
同样,`%`和`%%`分别表示去掉结尾匹配`pattern`的最短部分和最长部分。
在`Linux`开发中,`strip`命令可以从目标文件或可执行文件中剥掉一些符号信息和调试信息,使文件变小。
它不仅可以针对可执行文件,还能针对目标文件和动态库等。
通过剥离符号信息,可以减少文件占用的空间,同时在调试时也更方便。
希望这些信息对你有所帮助,如果你还有其他问题,请随时向我提问。
Shell 经典实例
Thizlinux 系统教程 Shell 经典实例----------------Milo经典小shell1 列目录树的shell脚本如下:#!/bin/sh# dtree: Usage: dtree [any directory]dir=${1:-.}(cd $dir; pwd)find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"2 while中使用read (file是一个文件)cat file | while read linedoecho $lineecho " :: Please input any key(s):c"str4read=""while truedochr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null`str4read=$str4read$chr4readif [ "$chr4read" = "" ] ;then break; fidoneecho " :: |$str4read|"done3 将多个空格替换为字符sed 's/[ ][ ]*/ /g'如果空格与tab共存时用sed -e 's/[[:space:]][[:space:]]*/ /g' filename4用脚本实现分割文件#!/bin/bashif [ $# -ne 2 ]; thenecho 'Usage: split file size(in bytes)'exitfifile=$1size=$2if [ ! -f $file ]; thenecho "$file doesn't exist"exitfi#TODO: test if $size is a valid integerfilesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesizelet pieces=$filesize/$sizelet remain=$filesize-$pieces*$sizeif [ $remain -gt 0 ]; thenlet pieces=$pieces+1fiecho pieces: $piecesi=0while [ $i -lt $pieces ];doecho split: $file.$i:dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1doneecho "#!/bin/bash" > mergeecho "i=0" >> mergeecho "while [ $i -lt $pieces ];" >> mergeecho "do" >> mergeecho " echo merge: $file.$i" >> mergeecho " if [ ! -f $file.$i ]; then" >> mergeecho " echo merge: $file.$i missed" >> mergeecho " rm -f $file.merged" >> mergeecho " exit" >> mergeecho " fi" >> mergeecho " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge echo " let i=$i+1" >> mergeecho "done" >> mergechmod u+x merge'5得到上月未日期,格式为YYYYMMDDget_lastday_of_lastmonth(){yy=`date +%Y`mm=`date +%m-1|bc`[ $mm -lt 1 ] && mm=12;yy=`expr $yy - 1`aaa=`cal $mm $yy`dd=`echo $aaa|awk '{print $NF}'`echo $yy$mm$dd}print $NF的$NF是打印最后一个列。
Genesis之C-shell 脚本编写入门
.... 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编程中的表达式(-d,-f,-L等)
shell编程中的表达式(-d,-f,-L等)1. ⽂件表达式-e filename 如果 filename存在,则为真-d filename 如果 filename为⽬录,则为真-f filename 如果 filename为常规⽂件,则为真-L filename 如果 filename为符号链接,则为真-r filename 如果 filename可读,则为真-w filename 如果 filename可写,则为真-x filename 如果 filename可执⾏,则为真-s filename 如果⽂件长度不为0,则为真-h filename 如果⽂件是软链接,则为真filename1 -nt filename2 如果 filename1⽐ filename2新,则为真。
filename1 -ot filename2 如果 filename1⽐ filename2旧,则为真。
2. 字符串变量表达式If [ $a = $b ] 如果string1等于string2,则为真字符串允许使⽤赋值号做等号if [ $string1 != $string2 ] 如果string1不等于string2,则为真if [ -n $string ] 如果string ⾮空(⾮0),返回0(true)if [ -z $string ] 如果string 为空,则为真if [ $sting ] 如果string ⾮空,返回0 (和-n类似)逻辑⾮ ! 条件表达式的相反if [ ! 表达式 ]if [ ! -d $num ] 如果不存在⽬录$num逻辑与 –a 条件表达式的并列if [ 表达式1 –a 表达式2 ]逻辑或 -o 条件表达式的或if [ 表达式1 –o 表达式2 ]。
shell编程之给变量赋值的五种方法
shell编程之给变量赋值的五种方法1. Shell中的变量类型Shell中的变量可以分为环境变量、位置变量、预定义的特殊变量以及用户自定义变量、<!--[if !supportLists]-->2. <!--[endif]-->环境变量Shell中的环境变量是一类Shell预定义变量,是用于设置系统运行环境的变量,环境变量由系统统一命名。
部分系统变量的值由系统设定,部分环境变量的值可以由用户给定。
环境变量的名称由大写字母组成,常用的Shell环境变量如下所示:HOME: 用户主目录的全路径名,cd $HOME 即可切换到用户的主目录PATH:类似于windows下的路径,Shell会在里面依次寻找二进制的可执行文件。
echo $PATH可以显示当前的PATH,添加新的PATH方法$PATH=$PATH:新PATHTERM: 终端类型 echo $TERMPS1: 提示符,root用户默认为#,普通用户默认为$SHELL: Shell解释器的绝对路径LOGNAME: 登录用户的用户名UID:当前用户的UID echo $UID<!--[if !supportLists]-->3. <!--[endif]-->位置变量位置变量是根据出现在命令行上的参数的位置确定的变量,在调用Shell程序的命令行中,参数的位置定义如下所示。
$命令参数1 参数2 参数3其中 $0 对应执行的命令名$1 对应参数1$2 对应参数2$3 对应参数3(一定要搞清楚顺序!!)<!--[if !supportLists]-->4. <!--[endif]-->预定义的特殊变量预定义的特殊变量有着特殊的含义,用户不可以更改,所有的预定义变量都由“$”符号和另外一个符号组成,常用的预定义特殊变量如下所示$#:位置参数个数(不包括Shell脚本名)$*: 位置参数组成的字符串$!: 上一个后台命令对应的进程号$?: 上一个命令的退出状态,为十进制数字,如果返回为0,则代表执行成功。
shell echo ¥line用法
shell echo ¥line用法Shell是一种命令行解释器,它在操作系统中起着重要的作用。
其中,`echo`命令是用来在命令行中打印文本或字符串的常用命令。
我们将以"[shell echo ¥line用法]"为主题,一步一步回答以下问题。
第一步:了解`echo`命令在Shell中,`echo`命令用于输出文本或字符串。
它是一个简单而常见的命令,用于打印一行文本或将文本作为脚本的一部分输出。
通常,我们使用`echo`命令来调试Shell脚本或在命令行中显示一些信息。
第二步:了解`echo`命令的基本用法`echo`命令的基本用法非常简单。
它只需要在命令行中使用`echo`命令,然后在引号中输入要打印的文本或字符串。
例如,输入以下命令:shellecho "Hello, World!"这将在命令行中打印出"Hello, World!"。
在这个简单的例子中,`echo`命令会将引号内的文本原样输出。
第三步:探索`echo`命令的特殊用法除了基本用法外,`echo`命令还有一些特殊的用法。
其中一个是使用转义字符。
在Shell中,转义字符由反斜杠(`\`)引导,后面跟着一个字符。
下面是一些常见的转义字符:- `\n`:换行符- `\t`:制表符- `\\`:反斜杠- `\"`:双引号通过使用转义字符,我们可以在输出的文本中插入换行符、制表符、反斜杠和双引号。
例如,输入以下命令:shellecho "Hello,\nWorld!"这将在输出中创建一个新行,打印出:Hello,World!同样地,我们可以使用`\t`来创建一个制表符。
例如,输入以下命令:shellecho -e "Hello,\tWorld!"这将在输出中创建一个制表符,打印出:Hello, World!请注意,在这个例子中,我们使用了`-e`选项来告诉`echo`命令识别并处理转义字符。
shell let用法
shell let用法
shell let是一种Unix shell命令,它用于设置环境变量。
使用shell let命令可以将一个字符串值分配给一个环境变量。
shell let命令的语法为:let
variable_name=value。
在使用shell let命令时,变量名不需要使用$符号,但在使用变量时,需要将$符号添加到变量名前面。
例如,如果使用shell let命令将“hello”分配给变量name,则在其他命令中使用该变量时,应该使用“$name”,而不是“name”。
shell let命令还可以用于执行数学运算。
例如,可以使用shell let命令将两个数字相加,并将结果分配给一个变量。
例如,可以使用以下命令将10和20相加,并将结果分配给变量sum:let sum=10+20。
除了执行数学运算外,shell let命令还可以用于比较数字。
例如,可以使用以下命令比较两个数字,并将结果分配给一个变量:let result=10>5。
总的来说,shell let命令是一个非常有用的工具,可以用于设置环境变量、执行数学运算和比较数字。
Shell脚本编写如何处理用户输入和交互式操作
Shell脚本编写如何处理用户输入和交互式操作在编写Shell脚本时,处理用户输入和进行交互式操作是非常重要的技巧。
这些功能可以帮助我们创建更加灵活和易用的脚本,提高用户体验。
本文将介绍如何使用Shell脚本来处理用户的输入和进行交互操作,并提供一些实用的示例代码。
1. 处理用户输入在Shell脚本中,我们可以通过多种方式获取用户的输入。
以下是几种常见的处理用户输入的方法:1.1 使用read命令获取用户输入read命令可以用来从标准输入读取用户的输入,并将输入保存到一个变量中。
通过read命令可以实现简单的用户交互功能。
示例代码1:通过read命令获取用户的名称并输出```shell#!/bin/bashecho "请输入您的名称:"read nameecho "您好,$name!"```运行以上脚本,在控制台中会提示用户输入名称,用户输入后脚本会打印出"您好,xxx!"的消息,其中xxx为用户输入的名称。
1.2 使用命令行参数获取用户输入除了read命令,Shell脚本还可以通过命令行参数获取用户的输入。
命令行参数是指在运行脚本时在脚本名称后面添加的参数。
示例代码2:通过命令行参数获取用户的名称并输出```shell#!/bin/bashname=$1echo "您好,$name!"```运行以上脚本时,在脚本名称后面添加参数,比如"bash script.sh Tom",脚本会打印出"您好,Tom!"的消息。
2. 进行交互式操作除了获取用户输入,Shell脚本还可以通过交互式操作与用户进行动态交互。
以下是几种常见的交互式操作方法:2.1 使用select命令提供菜单选择select命令可以用来生成一个带有选项的菜单供用户选择。
示例代码3:通过select命令提供菜单选择```shell#!/bin/bashoptions=("Option 1" "Option 2" "Option 3" "Quit") select choice in "${options[@]}"docase $choice in"Option 1")echo "您选择了选项1";;"Option 2")echo "您选择了选项2";;"Option 3")echo "您选择了选项3";;"Quit")break;;*)echo "无效选项";;esacdone```运行以上脚本,在控制台中会显示一个菜单供用户选择,用户可以通过输入数字或选择对应的菜单选项进行操作。
shell lt 表达式 -回复
shell lt 表达式-回复lt是less than的缩写,在shell编程中用于比较数值大小。
本文将以"[shell lt 表达式]"为主题,详细介绍shell编程中的lt表达式,并逐步回答相关问题。
# 第一步:了解lt表达式的语法和用法(150字)在shell编程中,lt表达式用于比较数值的大小,判断一个数值是否小于另一个数值。
它的语法为`[ number1 -lt number2 ]`或`(( number1 < number2 ))`。
# 第二步:解释lt表达式的使用范例(200字)下面通过一个例子来解释lt表达式的使用方法。
假设我们需要检查一个文件的大小是否小于100MB:filesize=(du -sm "example.txt" awk '{print 1}')if [ filesize -lt 100 ]; thenecho "文件大小小于100MB"elseecho "文件大小大于等于100MB"fi在上述例子中,我们使用了du命令来获取文件的大小(以MB为单位),然后使用awk命令提取出文件大小的数值部分。
接着,我们使用lt表达式来判断文件大小是否小于100,并根据判断结果输出不同的信息。
# 第三步:解释使用lt表达式的注意事项(200字)使用lt表达式时需要注意以下几点:1. 数值比较时,要确保比较的两个数值都是整数。
如果有小数部分,可以使用浮点数运算工具(如bc)进行处理。
2. 比较过程中,如果数值比较相等,lt表达式会返回false。
如果需要判断两个数是否相等,可以使用eq表达式。
3. 数值比较前,最好进行输入合法性检查,以避免非法输入导致的异常。
# 第四步:解答使用lt表达式遇到的常见问题和解决方案(500字)在使用lt表达式时,可能会遇到以下一些常见问题:1. Q: 如何比较两个字符串的长度?A: lt表达式只适用于数值的比较,无法直接用于字符串比较。
3.1.3 Shell高级操作[共3页]
并自动输入历史命令。还可以在提示符下输入 history 命令查看所有历史命令。
[root@localhost root]# history |more //查看历史命令, |more 是为了一屏一屏的显示 1 ls 2 clear 3 rpm -qa |grep sendmail
43
ifcfg ifdown
ifnames
[root@localhost root]# ifconfig
ifup //选择 ifconfig 命令,查看 IP 信息
2.自动输入历史命令
用户在当前 Linux 中输入的所有命令,系统都会将其自动记录到一个文件中(~/.bash_history),ห้องสมุดไป่ตู้
记录的多少由环境变量中的 HISTSIZE 决定。在输入命令时,用户可以通过方向键的上下键来选择
8 月 12 04:53 install.log.syslog
[root@localhost root]# echo 'ls -l'
//这里是单引号
ls –l
z “;”符号 分隔多个命令符号,此符号用来在同一命令行中运行多个命令,例如:
[root@localhost root]# ls -l ;pwd 总用量 24
-rw-r--r-- 1 root root
-rw-r--r-- 1 root root
-rw-r--r-- 1 root root
864 15665 3256
8 月 12 04:55 anaconda-ks.cfg 8 月 12 04:54 install.log 8 月 12 04:53 install.log.syslog
例如,用户首先输入命令的前几个字母,然后按[TAB]键,如果与输入字母匹配的仅有一个命
