Shell
Posted qqmini
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell相关的知识,希望对你有一定的参考价值。
1.常见bash你置命令及应用实践举例:
1.echo 变量名表:
将变量名表指定的变量显示到标准输出
set -- "I name" nihao a # set -- 设置变量
echo $# 查看参数的个数
echo $1 查看第一个变量
[[email protected] ~]# echo oldboy
oldboy
echo 后面跟两个参数:
-n :不换行
-e :后面跟命令参数
[[email protected] ~]# echo -e "hello,\nyou good"
hello,
you good
echo 也可以追加内容到文件里面
[[email protected] shell]# echo "###@@@" > a.log
[[email protected] shell]# cat a.log
###@@@
也可以追加内容到文件结尾 使用 ‘>>’
2.read 变量名表:
从标准输入读字符串,传给指定变量,可以在函数中用 local 变量名 的方式申明局部变量。读取用户的输入。
-p :你输入的数据。
1 #!/bin/bash 2 read -p "输入的数据:" var 3 echo $var
[[email protected] shell]# sh text.sh
输入的数据:12
12
3.printf 打印格式化的字符串(功能比echo大)。
例如:
[[email protected] shell]# printf "women\tzaiyi\nqi\n"
women zaiyi
qi
4. history
显示历史记录信息
-c :清除历史记录。
-d :清除指定的历史记录。 history -d 2 (你需要清除的号)
5. ulimit 查看文件的描述符:
-a :查看基本的参数。
6. export 变量名=value
7. shift 使你的变量降级
8.time 计算你执行命令的时间
[[email protected] shell]# time du -sh /etc/ 29M /etc/ real 0m0.391s user 0m0.002s sys 0m0.123s
2.常见的字符串生产案例:
批量文件改名案例:
打下面文件中的 filename 出掉。
1. 创建数据:
[[email protected] shell]# touch haha_1000_filename.jpg haha_1001_filename.jpg haha_1002_filename.jpg haha_1003_filename.jpg haha_1004_filename.jpg [[email protected] shell]# ll 总用量 8 -rw-r--r--. 1 root root 7 4月 26 05:23 a.log -rw-r--r--. 1 root root 0 4月 26 06:03 haha_1000_filename.jpg -rw-r--r--. 1 root root 0 4月 26 06:03 haha_1001_filename.jpg -rw-r--r--. 1 root root 0 4月 26 06:03 haha_1002_filename.jpg -rw-r--r--. 1 root root 0 4月 26 06:03 haha_1003_filename.jpg -rw-r--r--. 1 root root 0 4月 26 06:03 haha_1004_filename.jpg
mkdir /oldboy cd /oldboy
touch stu_102999_1_finished.jpg
touch stu_102999_2_finished.jpg
touch stu_102999_3_finished.jpg
touch stu_102999_4_finished.jpg
touch stu_102999_5_finished.jpg
方法1:shell脚本for循环结合sed实现
[检查数据]
[[email protected] oldboy]# ll
total 4
-rw-r--r-- 1 root root 85 Oct 2 12:54 oldboy_modi_file.sh
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_1_finished.jpg
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_2_finished.jpg
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_3_finished.jpg
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_4_finished.jpg
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_5_finished.jpg
[开发脚本]
[[email protected] oldboy]# cat oldboy_modi_file.sh
#!/bin/sh
for file in `ls ./*.jpg`
#shell脚本for循环,file为变量依次取得ls ./*.jpg的结果文件名
do
mv $file `echo $file|sed ‘s/finished//g‘`
#使用mv命令进行更改文件,新的文件名字符串拼接是本题的重点。
done
#特别提示:通过本题,可以学习到for循环的使用,及mv、sed等命令的使用
[执行脚本]
[[email protected] oldboy]# sh oldboy_modi_file.sh
[检查结果]
[[email protected] oldboy]# ll
total 4
-rw-r--r-- 1 root root 85 Oct 2 12:54 oldboy_modi_file.sh
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_1_.jpg
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_2_.jpg
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_3_.jpg
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_4_.jpg
-rw-r--r-- 1 root root 0 Oct 2 12:50 stu_102999_5_.jpg
方法二:shell脚本for循环加变量的部分截取方法
[[email protected] oldboy]#ls -l
total 4
-rw-r--r-- 1 root root 114 Nov 14 00:21 change_file_name.sh
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_1_finished.jpg
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_2_finished.jpg
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_3_finished.jpg
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_4_finished.jpg
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_5_finished.jpg
[[email protected] oldboy]#cat change_file_name.sh
#!/bin/sh
# oldboy QQ:31333741
for file in `ls ./*.jpg`
do
/bin/mv $file `echo "${file%finished*}.jpg"` #这里就是变量的截取新方法,在老男孩的shell编程课程中会讲到此用法。
done
[[email protected] oldboy]#sh change_file_name.sh
[[email protected] oldboy]#ls -l
total 4
-rw-r--r-- 1 root root 114 Nov 14 00:21 change_file_name.sh
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_1_.jpg
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_2_.jpg
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_3_.jpg
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_4_.jpg
-rw-r--r-- 1 root root 0 Nov 14 00:23 stu_102999_5_.jpg
特别提示:本脚本和文件在同一目录
方法三:ls结合awk实现
[[email protected] oldboy]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_1_finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_2_finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_3_finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_4_finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_5_finished.jpg
[[email protected] oldboy]# ls |awk -F ‘finished‘ ‘{print $0}‘
stu_102999_1_finished.jpg
stu_102999_2_finished.jpg
stu_102999_3_finished.jpg
stu_102999_4_finished.jpg
stu_102999_5_finished.jpg
[[email protected] oldboy]# ls |awk -F ‘finished‘ ‘{print $1}‘
stu_102999_1_
stu_102999_2_
stu_102999_3_
stu_102999_4_
stu_102999_5_
[[email protected] oldboy]# ls |awk -F ‘finished‘ ‘{print $2}‘
.jpg
.jpg
.jpg
.jpg
.jpg
[[email protected] oldboy]# ls |awk -F ‘finished‘ ‘{print $1$2}‘
stu_102999_1_.jpg
stu_102999_2_.jpg
stu_102999_3_.jpg
stu_102999_4_.jpg
stu_102999_5_.jpg
[[email protected] oldboy]# ls |awk -F ‘finished‘ ‘{print "mv "$0" "$1$2" "}‘|/bin/bash
[[email protected] oldboy]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_1_.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_2_.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_3_.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_4_.jpg
-rw-r--r-- 1 root root 0 Nov 13 18:13 stu_102999_5_.jpg
方法四:通过专业的改名命令rename实现
[[email protected] oldboy]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_1_finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_2_finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_3_finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_4_finished.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_5_finished.jpg
[[email protected] oldboy]# rename "finished" "" * ==>执行批量改名
[[email protected] oldboy]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_1_.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_2_.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_3_.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_4_.jpg
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_5_.jpg
拓展下:改扩展名的方法
[[email protected] oldboy]# rename .jpg .oldboy *
[[email protected] oldboy]# ll
total 0
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_1_.oldboy
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_2_.oldboy
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_3_.oldboy
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_4_.oldboy
-rw-r--r-- 1 root root 0 Nov 13 19:38 stu_102999_5_.oldboy
特别提示:如果大家有需要解答问题可以,blog留言给我。我们互相交流,共同切磋,共同进步。
兄弟们啊,这个问题并不重要,解答问题的思路才是最重要的。
以上是关于Shell的主要内容,如果未能解决你的问题,请参考以下文章