例子一:绘制特殊图形
#!/bin/bash MAX_NO=0 echo -n "Enter Number between (5 to 9) : " read MAX_NO if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ] ; then echo "WTF... I ask to enter number between 5 and 9, Try Again" exit 1 fi clear for (( i=1; i=i; s-- )) do echo -n " " done for (( j=1; j=1; i-- )) do for (( s=i; s<=MAX_NO; s++ )) do echo -n " " done for (( j=1; j<=i; j++ )) do echo -n " ." done echo "" done echo -e "\n\n\t\t\t Whenever you need help, Tecmint.com is always there"
输出结果:
[root@tecmint ~]# chmod 755 Special_Pattern.sh [root@tecmint ~]# ./Special_Pattern.sh Enter Number between (5 to 9) : 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Whenever you need help, Tecmint.com is always there
例子二:五颜六色的脚本
Linux终端也是支持五颜六色的,请看下面的脚本:
#!/bin/bash clear echo -e "\033[1m Hello World" # bold effect echo -e "\033[5m Blink" # blink effect echo -e "\033[0m Hello World" # back to noraml echo -e "\033[31m Hello World" # Red color echo -e "\033[32m Hello World" # Green color echo -e "\033[33m Hello World" # See remaing on screen echo -e "\033[34m Hello World" echo -e "\033[35m Hello World" echo -e "\033[36m Hello World" echo -e -n "\033[0m" # back to noraml echo -e "\033[41m Hello World" echo -e "\033[42m Hello World" echo -e "\033[43m Hello World" echo -e "\033[44m Hello World" echo -e "\033[45m Hello World" echo -e "\033[46m Hello World" echo -e "\033[0m Hello World"
输出结果:
你可以对上面的列子举一反三,把它用到你自己的脚本中去。
例子三:加密文件/目录
下面的例子演示了如何加密一个份文件或者文件夹。目前的这个版本的脚本有一些局限,例如你必须把它和你要加密的文件/目录放到同一个文件夹下面。另外,你可能需要安装“pinentry-gui”。在Fedora下安装“pinentry-gui”的命令是:
[root@midstage ~]# yum install pinentry-gui
[root@midstage ~]# apt-get install pinentry-gui
#!/bin/bash echo "Welcome, I am ready to encrypt a file/folder for you" echo "currently I have a limitation, Place me to the same folder, where a file to be encrypted is present" echo "Enter the Exact File Name with extension" read file; gpg -c $file echo "I have encrypted the file sucessfully..." echo "Now I will be removing the original file" rm -rf $file
[root@tecmint ~]# chmod 755 Encrypt.sh [root@tecmint ~]# ./Encrypt.sh Welcome, I am ready to encrypt a file/folder for you currently I have a limitation, Place me to the same folder, where a file to be encrypted is present Enter the Exact File Name with extension package.xml Enter passphrase Passphrase _________________________________ Please re-enter this passphrase Passphrase _________________________________ I have encrypted the file successfully... Now I will be removing the original file
gpg -c: 这个命令使用aka来加密文件。 在你需要的时候,你需要对加密的文件进行解密。这里我们不给出具体的代码了,你可以自己尝试着写出来。提示:使用命令 gpg -d filename.gpg > filename 可以解密一份文件。
例子四:查看服务器利用率
查看服务器的利用率是管理员的一份重要的日常工作。聪明的管理员是知道如何是这份任务自动化的。下面的这份脚本会抓取服务器的很多信息,快快试试吧!
#!/bin/bash date; echo "uptime:" uptime echo "Currently connected:" w echo "--------------------" echo "Last logins:" last -a |head -3 echo "--------------------" echo "Disk and memory usage:" df -h | xargs | awk '{print "Free/total disk: " $11 " / " $9}' free -m | xargs | awk '{print "Free/total memory: " $17 " / " $8 " MB"}' echo "--------------------" start_log=`head -1 /var/log/messages |cut -c 1-12` oom=`grep -ci kill /var/log/messages` echo -n "OOM errors since $start_log :" $oom echo "" echo "--------------------" echo "Utilization and most expensive processes:" top -b |head -3 echo top -b |head -10 |tail -4 echo "--------------------" echo "Open TCP ports:" nmap -p- -T4 127.0.0.1 echo "--------------------" echo "Current connections:" ss -s echo "--------------------" echo "processes:" ps auxf --width=200 echo "--------------------" echo "vmstat:" vmstat 1 5
[root@tecmint ~]# chmod 755 Server-Health.sh [root@tecmint ~]# ./Server-Health.sh Tue Jul 16 22:01:06 IST 2013 uptime: 22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18 Currently connected: 22:01:06 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT tecmint pts/0 116.72.134.162 21:48 0.00s 0.03s 0.03s sshd: tecmint [priv] -------------------- Last logins: tecmint pts/0 Tue Jul 16 21:48 still logged in 116.72.134.162 tecmint pts/0 Tue Jul 16 21:24 - 21:43 (00:19) 116.72.134.162 -------------------- Disk and memory usage: Free/total disk: 292G / 457G Free/total memory: 3510 / 3838 MB -------------------- OOM errors since Jul 14 03:37 : 0 -------------------- Utilization and most expensive processes: top - 22:01:07 up 174 days, 4:42, 1 user, load average: 0.36, 0.25, 0.18 Tasks: 149 total, 1 running, 148 sleeping, 0 stopped, 0 zombie Cpu(s): 0.1%us, 0.0%sy, 0.0%ni, 99.3%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 3788 1128 932 S 0.0 0.0 0:32.94 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:14.07 migration/0
例子五:查看硬盘使用情况及发送提示邮件
下面的这个例子展示了当硬盘的使用空间超出了预期设定的值时,如果通过脚本来发送提示邮件。
MAX=95 EMAIL=server@127.0.0.1 PART=sda1 USE=`df -h |grep $PART | awk '{ print $5 }' | cut -d'%' -f1` if [ $USE -gt $MAX ]; then echo "Percent used: $USE" | mail -s "Running out of disk space" $EMAIL fi
说明:将上述脚本中的“USER”替换成你的用户名。你可以通过命令“mail”来查看你的邮件。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson的sh是第一种Unix Shell,Windows Explorer是一个典型的图形界面Shell。
本文向大家介绍linux shell(.sh)脚本编写和运行入门,包括了linux shell(.sh)脚本编写和运行入门的使用技巧和注意事项,需要的朋友参考一下 编写第一个shell脚本 在gedit中编写.sh格式的文件,保存为a.sh。 在终端调用脚本,定位到目录,然后输入: bash a.sh 看到打印结果如上所示。 编写第一个if/else脚本 编写的if/else如下: if和 ; 之
5. Shell脚本语法 5.1. 条件测试:test [ 命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的Exit Status为0,如果测试结果为假,则命令的Exit Status为1(注意与C语言的逻辑表示正好相反)。例如测试两个数的大小关系: $ VAR=2 $ test $VAR -gt 1 $ echo $? 0 $ test $VAR -gt 3 $ echo
5. 练习:实现简单的Shell 用讲过的各种C函数实现一个简单的交互式Shell,要求: 1、给出提示符,让用户输入一行命令,识别程序名和参数并调用适当的exec函数执行程序,待执行完成后再次给出提示符。 2、识别和处理以下符号: 简单的标准输入输出重定向(<和>):仿照例 30.5 “wrapper”,先dup2然后exec。 管道(|):Shell进程先调用pipe创建一对管道描述符,然后f
Unix/Linux上常见的 Shell 脚本解释器有 bash、sh、csh、ksh等,习惯上把它们称作一种 Shell。我们常说有多少种 Shell,其实说的是Shell脚本解释器。
练习5:实现函数调用堆栈跟踪函数 (需要编程) 我们需要在lab1中完成kdebug.c中函数print_stackframe的实现,可以通过函数print_stackframe来跟踪函数调用堆栈中记录的返回地址。在如果能够正确实现此函数,可在lab1中执行 “make qemu”后,在qemu模拟器中得到类似如下的输出: …… ebp:0x00007b28 eip:0x00100992 args