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的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本 片段

vue2.0 代码功能片段

nodejs常用代码片段

sh shell片段

常用python日期日志获取内容循环的代码片段

Eclipse 中的通用代码片段或模板