学习shell脚本
一、什么是shell脚本
shell脚本是利用shell的功能所写的一个【程序(program)】。这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们想要的处理目的。
1.1 为什么要学习shell脚本
- 自动化管理的重要根据
- 跟踪与管理系统的重要工作
- 简单入侵检测功能
- 连续命令单一化
- 简易的数据处理
- 跨平台支持与学习历程较短
1.2 第一个脚本的编写与执行
直接命令执行:shell.sh必须要有可读与可执行(rx)的权限:
- 绝对路径
- 相对路径
- 变量【PATH】
- bash程序:【bash shell.sh】 或 【sh shell.sh】
#!/bin/bash
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/admin/.loc al/bin:/home/admin/bin
export PATH
echo -e "Hello World! \a \n"
exit 0
1.3 建立shell脚本的良好编写习惯
文件头处记录好:
- 脚本的功能
- 版本信息
- 作者与联络方式
- 版权声明方式
- History(历史记录)
- 脚本内较特殊的命令,使用【绝对路径】的方式执行
- 脚本运行时需要的环境变量预先声明与设置
二、简单的shell脚本
2.1 简单范例
-
交互式脚本:变量内容由用户决定
#!/bin/bash #Program: # User inputs his first name and last name. Program shows his full name. #History: #2015/07/16 Sino First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH read -p "Please input your first name: " firstname # 提示使用者输入 read -p "Please input your last name: " lastname # 提示使用者输入 echo -e "\nYour full name is: ${firstname} ${lastname}" # 结果由屏幕输出
-
随日期变化:利用date建立文件
#!/bin/bash #Program: # Program creates three files, which named by user's input and date command. #History: #2022/11/10 Sino First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/ bin export PATH # 1. 让使用者输入文件名称,并取得fileuser这个变量 echo -e "I will use 'touch'command to create 3 files." read -p "Please input your filename: " fileuser # 2. 为了避免使用者随意按Enter,利用变量功能分析文件名是否有设置? filename=${fileuser:-"filename"} # 3. 开始利用date命令来取得所需要的文件名了 date1=$(date --date='2 days ago' +%Y%m%d) date2=$(date --date='1 days ago' +%Y%m%d) date3=$(date +%Y%m%d) file1=${filename}${date1} file2=${filename}${date2} file3=${filename}${date3} # 4. 将文件名建立 touch "${file1}" touch "${file2}" touch "${file3}"
-
数值运算:简单的加减乘除
#!/bin/bash #Program: # User inputs 2 integer numbers; program will cross these two numbers. #History: #2022/11/10 Sino First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/ bin export PATH echo -e "You SHOULD input 2 numbers, I will multiplying them! \n" read -p "first number: " firstnu read -p "second number: " secnu total=$((${firstnu}*${secnu})) echo -e "\nThe result of ${firstnu} x ${secnu} ==> ${total}"
-
数值运算:通过bc计算Pi(圆周率)
#!/bin/bash #Program: # User input a scale number to calculate pi number. #History: #2022/11/10 Sino First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH echo -e "This program will calculate pi value. \n" echo -e "You should input a float number to calculate pi value.\n" read -p "The scale number (10~10000) ? " checking num=${checking:-"10"} # 开始判断是否有输入数值 echo -e "Starting calculate pi value. Be patient." time echo "scale=${num}; 4*a(1)" | bc -lq
2.2 脚本的执行方式差异(source、sh script、./script)
- 利用直接执行的方式来执行脚本
- 当子进程完成后,在子进程内的各项变量或操作将会结束而不会传回到父进程中
- 利用source来执行脚本:在父进程中执行
三、善用判断式
3.1 利用test命令的测试功能
[admin@localhost bin]$ test -e /dmtsai
[admin@localhost bin]$ test -e /dmtsai && echo "exist" || echo "Not exist"
Not exist
3.2 利用判断符号[]
利用判断符号来进行数据的判断
[admin@localhost bin]$ [ -z "${HOME}" ] ; echo $?
1
- 在中括号[]内的每个组件都需要有空格来分隔
- 在中括号的变量,最好都以双引号括号起来
- 在中括号内的常数,最好都以单或双引号括号起来
3.3 shell脚本的默认变量($0、$1...)
- $#:代表后接的参数【个数】
- $@:代表【"$1""$2""$3""$4"】之意,每个变量是独立的
- $*:代表【"$1c$2c$3c$4"】,其中c为分隔字符,默认为空格
#!/bin/bash
#Program:
# Program show the scriptnamae, parameters...
#History:
#2022/11/10 Sino First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "The script name is ==> ${0}"
echo "Total parameter number is ==> $#"
[ "$#" -lt 2 ] && echo "The number of parameter is less than 2. Stop here." && exit 0
echo "Your whole parameter is ==> '$@'"
echo "The 1st parameter ==> ${1}"
echo "The 2nd parameter ==> ${2}"
[admin@localhost bin]$ sh how_paras.sh theone haha quot
The script name is ==> how_paras.sh
Total parameter number is ==> 3
Your whole parameter is ==> 'theone haha quot'
The 1st parameter ==> theone
The 2nd parameter ==> haha
四、条件判断式
4.1 利用if...then
4.2 利用case...esac判断
4.3 利用function功能
五、循环
5.1 while do done、until do done(不定循环)
5.2 for...do...done(固定循环)
5.3 for...do...done的数值处理
六、shell脚本的跟踪与调试
sh [-nvx] scripts.sh
选项与参数:
-n :不要执行脚本,仅查询语法的问题
-v :执行脚本前,将脚本文件的内容输出到屏幕上
-x :将使用到的脚本内容显示到屏幕上,这是很有用的参数
标签:bin,脚本,sbin,shell,echo,学习,Shell,usr,Linux
From: https://www.cnblogs.com/I-am-Sino/p/16876151.html