`
DangDang0701
  • 浏览: 77268 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

Shell练习(1)

阅读更多
#!/bin/sh
if [ -n $1 ];then
        echo "" > /dev/null
fi
confFileName=$1
# DB接続情報の取得
confFile="/JOBSCHE/SHELLS/SK/CONTM/${confFileName}"
userid=`grep '^userid' ${confFile} | cut -d= -f2`
passwd=`grep '^passwd' ${confFile} | cut -d= -f2`
constr=`grep '^constr' ${confFile} | cut -d= -f2`
svaddr=`grep '^svaddr' ${confFile} | cut -d= -f2`
port=`grep '^port' ${confFile} | cut -d= -f2`

# DB接続テスト
CLASSPATH="${ORACLE_HOME}/jdbc/lib/classes12.zip:/JOBSCHE/SHELLS/SK/CONTM"
export CLASSPATH
java connectTest ${svaddr} ${port} ${constr} ${userid} ${passwd}
if [ $? -ne 0 ];then
        echo "${confFileName}の接続情報は無効です。ファイルの中身を確認してください。"
        exit 1
fi
echo "${confFileName}の接続情報は有効です。"

 解析:

1. #!/bin/sh

"#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在。如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell.如果脚本被编写为在Kornshell ksh中运行,而默认运行shell脚本的为C shell csh,则脚本在执行过程中很可能失败。
#!行中的解释器的路径必须是全路径,exec函数并不对其特殊处理,比如用PATH变量来搜索它的真实路径,所以路径是由程序员来保证正确的。


当然不必了,通过上面的解释,其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,我们可以用各种各样的解释器来写对应的脚本,比如说/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,甚至/bin/echo等等。

 

2. IF控制流程

 

"if" 表达式 如果条件为真则执行then后面的部分:
if ....; then
  ....
elif ....; then
  ....
else
  ....
fi

大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件

是否存在及是否可读等等…

  通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。

[ -f "somefile" ] :判断是否是一个文件

[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限

[ -n "$var" ] :判断$var变量是否有值

[ "$a" = "$b" ] :判断$a和$b是否相等

 3.变量

在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。
对变量赋值:
confFileName=$1
使用变量的值:(用花括号)
confFile="/JOBSCHE/SHELLS/SK/CONTM/${confFileName}"

 

4.从文件中取值:

userid=`grep '^userid' ${confFile} | cut -d= -f2`

grep:
在文件内搜索字符串
例:
grep 'dangdang' file.txt    在file.txt中搜索字符串“dangdang”

^:
匹配输入字符串的开始位置

cut:
cut命令用于从文件或者标准输入中读取内容并截取每一行的特定部分并送到标准输出。

截取的方式有三种,一是按照字符位置,二是按照字节位置,三是使用一个分隔符将一行分割成多个field,并提取指定的fields。

cut命令有5个参数,其中-c,-b,-f分别表示"character", "byte"以及"field"截取方式。当采用field模式截取时,需要用"-d"参数指定一个分隔符,分割符只能为单个字符。另外还有一个"- s",suppress,表示如果行中没有给出的分割符则不输出该行(默认为如果没有分隔符则将该行原封不动输出)


cut -d= -f2   
经过上面的解释不难看出这句话的意思。以“=”号作为分隔符,取得分隔后的第二个字符。

 

5 export

shell,每个shell都是由某个shell(称为父shell)派生的。
  在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程
  序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。
  export命令将使系统在创建每一个新的shell时定义这个变量的一个拷贝。这个过程称之为变量输出。

例:
$ cat >; shella
#!/bin/sh
aa = "abc"
^D
$ cat >; shellb
aa = "123"
shella
echo $aa
^D
运行shellb, 屏幕显示:
123
如果在shella的最底行加上一句
export aa
那么shellb的运行结果就是:
abc

 

6.java connectTest ${svaddr} ${port} ${constr} ${userid} ${passwd}

调用JAVA程序,并传入5个参数

 

调用的connectTest.java的内容:

import java.sql.*;
class connectTest{
	public static void main(String[] args){
		DataBaseAccessOra dbao = new DataBaseAccessOra();
		int rtnCode = 0;
		rtnCode = dbao.connect(args[0]+":"+args[1]+":"+args[2],args[3],args[4]);
		if (rtnCode != 0) {
			System.exit(rtnCode);
		}
		dbao.disconnect();
	}
}
class DataBaseAccessOra{
	//DBへ接続するためのメソッド
	public Connection con = null;
	public int connect(String connstr,String username,String password){
        	try {
                	//Oracle用のJDBCドライバをロード
                	Class.forName("oracle.jdbc.driver.OracleDriver");
                	//Oracle接続文字列(JDBC)
                	String ora_connect = "jdbc:oracle:thin:@"+connstr;
                	//DBへ接続
                	con = DriverManager.getConnection(ora_connect, username, password);
        	} catch (Exception ex) {
                	return 1;
        	}
                	return 0;
	}
	//DBから切断するためのメソッド
	public void disconnect() {
        	try {
                	con.close();
        	} catch (SQLException ex) {
                	ex.printStackTrace();
        	}
	}

}

 

7.IF的解析

if [ $? -ne 0 ];then
        echo "${confFileName}の接続情報は無効です。ファイルの中身を確認してください。"
        exit 1
fi

$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

-ne:不等于

echo:输出

解释:
如果前面调用 connectTest 的返回值不等于0,表示有错误。shell结束。

 

 

分享到:
评论

相关推荐

    shell练习1.txt

    shell练习1.txt

    shell shell练习 shell入门

    四、Shell练习实例 1. 文件操作:如创建、删除、移动、复制文件,可以使用`touch`、`rm`、`mv`、`cp`等命令。 2. 文本处理:使用`grep`搜索文本,`sed`编辑流数据,`awk`进行复杂的数据处理。 3. 环境变量:了解和...

    shell编程题目练习

    shell编程题目练习,练习基本的shell编程,学习脚本语言,提高效率

    shell脚本练习题

    根据提供的文件内容,我们可以归纳出一系列与Shell脚本相关的知识点,包括如何编写基本的脚本来完成特定任务,例如处理文件、目录操作、条件判断、循环结构等。下面将逐一解析这些练习题涉及的关键知识点。 ### ...

    shell脚本练习.rarshell脚本练习.rar

    在这个"shell脚本练习.rar"压缩包中,我们很显然可以找到一些用于学习和实践Shell脚本的源码文件。 在学习Shell脚本时,首先要了解基础语法,例如变量声明、赋值和引用,如`VAR="value"`。Shell脚本中的变量不需要...

    LINUX SHELL命令练习题

    LINUX SHELL 命令练习题 本次练习题涵盖了 LINUX SHELL commands 的多个方面,包括文件类型的确定、文件权限的修改、目录管理、文件重命名、系统初始化信息、系统启动级别的切换、后台执行程序、vi 编辑器的使用等...

    这是linux之shell练习的题目

    1. **使用 shell 程序执行脚本** - **选择合适的 shell 程序**:不同的脚本可能使用不同的 shell 程序。常见的 shell 程序包括 `sh`、`bash` 和 `tcsh` 等。 - `#!/bin/bash` 表示该脚本将使用 `bash` shell 运行...

    Shell程序编程练习

    shell编程入门,shell的处理过程分析,shell的语句分析,shell编程

    Shell编程练习及答案

    [操作系统 LX3B] Shell编程练习及答案,主要是:echo、read、for、while、until、case、在脚本中执行命令等。很有趣的一个是打印出用户指定目录或当前目录中的所有文件和目录,类似于tree命令的实现。

    实验十三-shell脚本练习

    ### 实验十三-shell脚本练习知识点详解 #### 一、创建日期格式的打包文件 **题目解析:**根据实验十三的描述,此部分要求我们创建一个shell脚本,该脚本的功能是将当前用户的根目录下的`work`目录打包成一个以用户...

    bash shell 练习题

    Bash Shell 练习题 本资源总结了 Bash Shell 的练习题,旨在帮助用户更好地学习和掌握 Bash Shell 的使用。该资源涵盖了多个方面的知识点,包括变量、命令、文件操作、过程控制、输入输出等。 一、变量 1.1 更改 ...

    实验十二 Bash Shell相关指令练习

    实验十二主要围绕Bash Shell进行了一系列的指令操作和练习,旨在熟悉和掌握Linux系统的命令行交互方式。Bash Shell是Linux系统默认的命令解释器,它提供了丰富的指令和功能,使得用户可以高效地管理和操作系统。 ...

    SHELL 练习

    Shell基本上是一个命令解释器,类似于DOS下的command。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。

    SHELL脚本练习 写一个脚本,利用循环计算10的阶乘

    SHELL脚本练习 SHELL脚本是一种强大的命令行脚本语言,它可以自动执行一系列命令,提高工作效率和简化操作。下面我们将通过六个实践练习,深入了解SHELL脚本的编写和应用。 1. 计算10的阶乘 在这个练习中,我们将...

    shell练习及答案.zip

    "shell练习及答案.zip"这个压缩包文件显然包含了与Shell编程相关的练习题及其对应的解答,这对于学习和提升Shell脚本编写技能非常有帮助。以下是关于Shell编程的一些关键知识点: 1. **Shell种类**:常见的Shell有...

    shell脚本练习

    Shell脚本是Linux/Unix操作系统中的一种编程语言,它允许用户通过命令行接口执行一系列命令。在学习和实践中,shell脚本的运用可以大大提高工作效率,自动化日常任务。本压缩包包含两个文件,"shell代码.zip"和"by....

    16shell脚本进阶_练习答案.zip

    16shell脚本进阶_练习答案。 1. 判断/var/目录下所有文件的类型 2. 添加10个用户user1-user10,密码为8位随机字符 3. /etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的输出为...

    shell编程练习

    ### Shell编程练习知识点详解 #### 一、记录每分钟的CPU使用率并写入文件(cpu_usage_yymmdd.txt) 在Linux环境下,记录系统的CPU使用情况是运维和开发人员经常需要的一项技能。本练习旨在帮助读者掌握如何利用Shell...

    shell脚本练习.txt

    shell脚本练习.txt

    linux中shell练习-习题5

    ### Linux中Shell练习-习题5 #### 一、Linux 下执行 Shell 脚本的方式 在 Linux 系统中,执行 Shell 脚本有两种主要的方法:通过 shell 程序来执行脚本和直接执行脚本。 ##### 1. 通过 shell 程序执行脚本 这种...

Global site tag (gtag.js) - Google Analytics