Shell脚本攻略:${ }获取文件名和后缀

目录

一、理论

1. ${ }分别替换得到不同的值

2. ${ } 可针对不同的变数状态赋值(沒设定、空值、非空值)

二、实验

1.打印文件名和后缀名

2.${}分别替换


一、理论

1. ${ }分别替换得到不同的值

# 是 去掉左边(键盘上#在 $ 的左边);

%是去掉右边(键盘上% 在$ 的右边);

单一符号是最小匹配;两个符号是最大匹配;

*是需要删除那边就放在哪边。

表1 ${ }替换

替换功能

${file#*/}
删掉第一个 / 及其左边的字符串
${file##*/}删掉最后一个 /  及其左边的字符串
${file#*.}
删掉第一个 .  及其左边的字符串
${file##*.}删掉最后一个 .  及其左边的字符串
${file%/*}删掉最后一个  /  及其右边的字符串

${file%%/*}
删掉第一个 /  及其右边的字符串
${file%.*}删掉最后一个  .  及其右边的字符串
${file%%.*}删掉第一个  .   及其右边的字符串

2. ${ } 可针对不同的变数状态赋值(沒设定、空值、非空值)

表2  ${ }状态赋值

状态赋值
${file-my.file.txt}假如 $file 沒有设定,则使用 my.file.txt 作传回值。(空值及非空值时不作处理) 
${file:-my.file.txt}假如 $file 沒有设定或为空值,则使用 my.file.txt 作传回值。 (非空值时不作处理)
${file+my.file.txt}假如 $file 设为空值或非空值,均使用 my.file.txt 作传回值。(沒设定时不作处理)
${file:+my.file.txt}若 $file 为非空值,则使用 my.file.txt 作传回值。 (沒设定及空值時不作处理)
${file=my.file.txt} 若 $file 沒设定,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。 (空值及非空值时不作处理)
${file:=my.file.txt} 若 $file 沒设定或为空值,则使用 my.file.txt 作传回值,同時将 $file 赋值为my.file.txt 。 (非空值时不作处理)
${file?my.file.txt}若 $file 沒设定,则将 my.file.txt 输出至 STDERR。 (空值及非空值時不作处理)
${file:?my.file.txt}若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值時不作处理)
${#var}可计算出变量值的长度

二、实验

1.打印文件名和后缀名

(1)变量赋值

[root@centos2 /]# file=test.tar

(2)打印文件名

[root@centos2 /]# echo ${file%.*}
test

(3)打印后缀名

[root@centos2 /]# echo ${file##*.}
tar

2.${}分别替换

(1)变量赋值

[root@centos2 /]# file=/abc1/abc2/abc3/my.file.txt

(2)删掉第一个 / 及其左边的字符串

[root@centos2 /]# echo ${file#*/}
abc1/abc2/abc3/my.file.txt

(3)删掉最后一个 /  及其左边的字符串

[root@centos2 /]# echo ${file##*/}
my.file.txt

(4)删掉第一个 .  及其左边的字符串

[root@centos2 /]# echo ${file#*.}
file.txt

(5)删掉最后一个 .  及其左边的字符串

[root@centos2 /]# echo ${file##*.}
txt

(6)删掉最后一个  /  及其右边的字符串

[root@centos2 /]# echo ${file%/*}
/abc1/abc2/abc3

(7)删掉第一个 /  及其右边的字符串:(空值)

[root@centos2 /]# echo ${file%%/*}

(8)删掉最后一个  .  及其右边的字符串

[root@centos2 /]# echo ${file%.*}
/abc1/abc2/abc3/my.file

(8)删掉第一个  .   及其右边的字符串

[root@centos2 /]# echo ${file%%.*}
/abc1/abc2/abc3/my

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用bash的内置命令来判断文件名后缀,具体可以使用以下代码: ```bash filename="example.txt" if [[ $filename == *.txt ]]; then echo "The file has a .txt extension" fi ``` 这里的 `[[ $filename == *.txt ]]` 表示如果文件名 `$filename` 后缀为 `.txt`,则条件成立。可以根据需要修改文件名后缀名来判断。 ### 回答2: 在Shell脚本中,我们可以使用一些方法来判断文件名后缀。 一种常见的方法是使用字符串操作,通过截取文件名字符串的最后几个字符来获取文件后缀,然后与我们想要判断的后缀进行比较。下面是一个示例: ```bash filename="example.txt" extension="${filename##*.}" # 获取文件后缀 if [ "$extension" == "txt" ]; then echo "文件后缀是txt" else echo "文件后缀不是txt" fi ``` 另一种方法是使用通配符来匹配文件名后缀。我们可以使用`[ ]`和`*`来表示任意字符,利用这个特性,我们可以判断文件名后缀是否与给定的后缀相匹配。下面是一个示例: ```bash filename="example.txt" if [[ $filename == *.txt ]]; then echo "文件后缀是txt" else echo "文件后缀不是txt" fi ``` 此外,还可以使用`case`语句来进行匹配判断,这种方式更适用于需要判断多种后缀的情况。下面是一个示例: ```bash filename="example.txt" case "$filename" in *.txt) echo "文件后缀是txt";; *.jpg) echo "文件后缀是jpg";; *) echo "文件后缀不是txt或jpg";; esac ``` 以上是几种常见的判断文件名后缀的方法,在实际应用中,可以根据自己的需求选择适合的方法来使用。 ### 回答3: 在shell脚本中,可以使用一些命令和工具来判断文件名后缀。以下是几种常见的方法: 1. 使用通配符和正则表达式:可以使用通配符(如*)和正则表达式来匹配文件名后缀。例如,使用通配符来匹配以“.txt”结尾的文件名: ```shell if [[ $filename == *.txt ]]; then echo "文件名后缀是.txt" fi ``` 2. 使用grep命令:可以使用grep命令和正则表达式来匹配文件名后缀。例如,使用grep命令来匹配以“.txt”结尾的文件名: ```shell if echo "$filename" | grep -q "\.txt$"; then echo "文件名后缀是.txt" fi ``` 3. 使用basename命令:可以使用basename命令来获取文件名,然后再判断文件名后缀。例如,使用basename命令来获取文件名,并使用case语句来判断后缀: ```shell filename=$(basename "$filename") case "$filename" in *.txt) echo "文件名后缀是.txt" ;; *) echo "文件名后缀不是.txt" ;; esac ``` 4. 使用参数扩展(Parameter Expansion):可以使用参数扩展来截取文件名后缀。例如,使用参数扩展来获取文件名后缀并比较: ```shell extension="${filename##*.}" if [[ $extension == "txt" ]]; then echo "文件名后缀是.txt" fi ``` 这些方法都可以用来判断文件名后缀,具体选择哪种方法取决于实际需求和脚本的复杂度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值